쉘에서 최상위 CPU 통계를 수신하려면 어떻게해야합니까?


12

에서 사용 된 CPU (백분율)를 정확하게 읽으려고합니다 top. 이것은 테스트를 위해 실행중인 명령입니다.

top -n1 | awk '/Cpu\(s\):/ {print $2}'

이것은 다음을 반환합니다.

10.7%us,

내가 원하는 적절한 데이터 조각입니다. 그러나 명령을 실행할 때마다 시스템에 다른로드를 적용하더라도 동일한 출력을 얻습니다 (물론 htop사용이 다르다는 것을 언급하지는 않습니다 ). 시작할 때마다 topCPU 사용량이 동일한 것 같습니다. 몇 프레임 후에 만 ​​적절한 가치를 얻습니다.

이 방법으로 top의 출력을 구문 분석 할 수없는 것처럼 보이므로 쉘에서 정확한 값을 읽을 수있는 신뢰할 수있는 다른 응용 프로그램을 찾고 있습니다. 나는 htop나에게 코어 당 독서를 줄 수있는 방법을 정말로 좋아한다 .

나는 해봤 iostat하고 mpstat있지만 부정확하고 "변화에 느린"값을 줄 것으로 보인다.


2
하지마 적절한 질문은 쉘에서 최상위 CPU 사용 통계를 얻는 방법은 무엇입니까?
Stéphane Gimenez

@ StéphaneGimenez 감사합니다 내 질문을 수정했습니다
n0pe

답변:


12

이 스크립트를 사용합니다 ( 아치 보드 의이 스레드에서 ).

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))

리눅스는 / proc /에 훌륭한 정보를 가지고있다- 모든 장점 에 대해서는 linux.die.net/man/5/proc 를 보라 . 이것들은 리눅스 전용이라는 것을 명심하십시오. Sigar 와 같은 라이브러리를 사용하지 않으면 해당 정보를 얻는 플랫폼 간 방법이 실제로 없습니다 .
Pat Notz

아이디어는 좋지만 일부 세부 사항은 올바르지 않습니다. 유휴 값은 5 번째 열이며, 적당한 비율을 얻으려면 iowait 열 (6 번째 열)도 추가해야합니다. 완전히 정확하려면 모든 "휴식"값을 추가해야하지만 종종 매우 작습니다.
피터 아이젠 트라우트

"cpu"열을 세는 경우 유휴 값은 다섯 번째 열입니다. 그렇지 않으면 네 번째입니다.
SunSparc

6

sar도 확인하십시오 . 구현 방식은 nix마다 다르지만 주어진 스냅 샷에서 기본 시스템 통계를 제공해야합니다. 나는 확실히 값이 명령이 처음으로 초기화되는 시점에서 얼마나 정확하지 해요,하지만 당신은 비교 방식을 볼 수 놀 수 top, iostat

출력은 상단과 같이 열 기반이므로 출력을 파이프 awk하거나 cut결과를 조작 할 수 있어야 합니다.


나는 sar혼합 된 결과로 이전에 시도했다 . @jasonwryan의 대답과 함께 갈 것입니다. 두 CPU 코어 모두의 사용량을 나타내도록 쉽게 수정할 수 있기 때문입니다.
n0pe


0

내가 찾은 것은 적어도 CentOS 6에서 위의 질문을 한 사람과 비슷합니다. 한 번의 반복으로 배치 모드에서 맨 위로 실행하면 거의 같은 것으로 시작하는 것처럼 거의 동일한 그림을 수집하는 것처럼 보입니다. 마지막으로 표시를 기억합니다. Top은 델타가 정확한 비율을 얻기 위해 적어도 두 개의 숫자를 축적 해야하는 것으로 보입니다. 10 회 이상 반복하여 테스트 한 결과, 두 번째로 나타나는 숫자는 각 실행에서 충분한 차별화를 보여주었습니다. 따라서이 라인을 통해 얻을 수있는 쉬운

top -b -n 2 | grep Cpu | tail -1

나는 이것을 postgres 쿼리와 같은 ps에서 선택된 프로세스의 grep 필터 및로드를 위해 가동 시간과 통합하는 것을 좋아합니다. 별명으로 매우 간단한 모니터를 표현할 수 있습니다.

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.