쉘에서 최고의 CPU 통계를 받는 방법은 무엇입니까?

쉘에서 최고의 CPU 통계를 받는 방법은 무엇입니까?

나는 이것에서 내가 사용하고 있는 CPU의 양(%)을 정확히 읽으려고 노력하고 있습니다 top. 테스트를 위해 실행 중인 명령은 다음과 같습니다.

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

그러면 다음이 반환됩니다.

10.7%us,

제가 원하는 정확한 데이터입니다. 그러나 명령을 실행할 때마다 시스템에 다른 로드를 적용하더라도 동일한 출력을 얻습니다( htop사용법이 다르다는 것은 말할 것도 없습니다). 시작할 때마다 topCPU 사용량이 동일한 것 같습니다. 몇 프레임 후에야 올바른 값이 제공됩니다.

이 방법으로 top의 출력을 구문 분석할 수 없는 것 같아서 셸에서 정확한 읽기를 제공할 수 있는 다른 신뢰할 수 있는 응용 프로그램을 찾고 있습니다. htop각 코어에 대한 판독값을 제공하는 방식이 정말 마음에 듭니다 .

나는 이것을 시도했지만 부정확 iostat하고 mpstat"천천히 변하는" 값을 제공하는 것 같습니다.

답변1

나는 이 스크립트를 사용합니다.아치보드에 올라온 이 글):

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

답변2

확인하다남자 이름,게다가. 각 nix 구현은 크게 다를 수 있지만 특정 스냅샷에 대한 기본 시스템 통계를 제공해야 합니다. 명령이 처음 초기화될 때 값이 얼마나 정확한지는 잘 모르겠지만, 시도해 보고 와 비교하는 방법을 확인할 수 있습니다 top.iostat

출력은 top과 마찬가지로 열 기반이므로 결과를 파이프 awk하거나 조작할 수 있어야 합니다.cut

답변3

본 적이 있나요 collectl? 필요에 따라 출력을 맞춤 설정할 수 있어 편리합니다. 바라보다:http://collectl.sourceforge.net/

답변4

내 결과는 적어도 CentOS 6에서 위의 질문을 한 사람과 유사합니다. 한 번의 반복 동안 배치 모드에서 top을 실행하면 마지막으로 표시한 것을 기억한 것부터 추세를 나타내는 것처럼 동일한 숫자를 수집하는 것 같습니다. Top은 정확한 백분율을 제공하기 위해 증분을 위해 최소한 몇 개의 숫자를 축적해야 하는 것 같습니다. 10번이 넘는 반복 테스트를 거친 후, 나타나는 두 번째 숫자는 각 실행에서 충분한 차이를 보였다는 것을 발견했습니다. 그래서 합격하기 쉽죠

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

나는 이것을 로딩 가동 시간 및 프로세스를 선택하는 ps의 grep 필터(예: postgres 쿼리)와 결합하는 것을 좋아합니다. 매우 간단한 모니터는 별칭으로 표시될 수 있습니다.

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"

관련 정보