쉘에서 최상위 CPU 통계를 수신하려면 어떻게해야합니까? {print $2}’ 이것은 다음을 반환합니다. 10.7%us, 내가 원하는 적절한

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

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

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

10.7%us,

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

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

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



답변

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

#!/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) ))


답변

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

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


답변

봤어 collectl? 필요에 따라 출력을 조정할 수 있기 때문에 편리합니다. 참조 : http://collectl.sourceforge.net/


답변

내가 찾은 것은 적어도 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'"


답변