Linux 명령 행에서 CPU 사용량을 얻는 데 사용할 수있는 방법은 무엇입니까? [닫은]


12

우리는 이것이 top리눅스에서 CPU 사용을 얻는 명령이며 다른 방법으로는 cat /proc/stattop이 사용하는 것을 포함 합니다.

Linux 명령 행에서 CPU 사용량을 얻는 다른 방법은 무엇입니까?

사용 사례 시나리오 : 이 명령의 출력은 스크립트에서 CPU 사용량을 지속적으로 기록하는 데 사용됩니다. top/proc/stat로그인하기 어려운 자세한 사용법을 제공합니다. CPU 정보를 얻는 더 쉬운 방법이 있습니까?


3
당신이 인용 한 것들에 무슨 문제가 있습니까?
pataluc

@pataluc 자세한 정보를 제공합니다. 전체 CPU 사용량이 필요합니다. CPU 사용 : 91 % Mem 사용 : 78 % Mem Free : 22 % 이와 유사한 ..
fasil

Nathan의 답변을 참조하십시오 ... sed값만 원하면 결과 를 얻을 수 있습니다 .
pataluc

"건설적이지 않은"투표 마감. 에서 superuser.com/help/dont-ask " 플래그와 가능성을 피가 ... 답변이 질문과 함께 제공되는 주관적인 질문을하고, 더 많은 답변을 기대 제거되는 질문을 방지하기 위해 '내가 사용 ______에 대한 ______ , 무엇을 사용하십니까? ' "
bwDraco 2016 년

3
@DragonLord 실제로,이 작업을 수행하는 방법은 상당히 제한되어 있으며 두 가지 답변이 실제로 유용합니다. 내 것은 매우 일반적인 오해를 지적 top하고 다른 하나는 매우 유용한 명령을 제공합니다. 내가 X를 사용 하는 것은 아닙니다 . 질문, 그러나 어떻게 X 질문을 합니까? 재개 투표.
terdon

답변:


14

다른 사람들이 말했듯이 가장 좋은 방법은 아마입니다 top. 약간의 조정과 약간의 구문 분석이 필요하지만 현재 CPU 사용량을 백분율로 제공 할 수 있습니다.

top사용자, 시스템 프로세스 및 nice프로세스 간에 CPU 사용량을 분할하므로이 세 가지의 합이 필요합니다. 따라서 출력 모드를 파싱 할 수 top있는 batch 모드 에서 실행할 수 있습니다 . 그러나 여기 에서 설명한 것처럼 첫 번째 반복 반복은 top -b부팅 이후 백분율 을 반환하므로 -n 2현재 백분율을 얻으려면 적어도 두 번의 반복 ( )이 필요합니다 . 작업 속도를 높이기 d위해 반복 간격을로 설정할 수 있습니다 0.01. 마지막으로 grepCPU 백분율을 포함하는 행을 사용 gawk하여 사용자, 시스템 및 멋진 프로세스를 합산 하는 데 사용 합니다.

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode

ps -o pcpu ax실행중인 각 프로세스의 % use를 추가 하여이 정보를 얻을 수도 있다고 생각했습니다 . 불행히도, 여기 에 설명 된대로 , ps"프로세스의 전체 수명 동안 실행에 소요 된 시간의 백분율을 반환합니다."는 필요하지 않습니다.


편집하다

귀하의 의견에 따라 귀하의 버전이 top내 것과 다르므로 대신 이것을 사용해야합니다.

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

그리고 현지화 문제를 피하려면 로케일을 C로 설정하십시오.

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

당신이 말한 것이 정확하기 때문에 대답을 삭제했습니다. 이것은 유효한 방법 인 것 같습니다.
Nathan C

@NathanC 나는 당신의 대답도 정확하다고 생각했습니다. 그것은 내가 대답했을 것입니다. 그런 다음 그것을 테스트하고 놀랐습니다 :).
terdon 2016 년

@terdon 자세한 답변 주셔서 감사합니다 ... 위의 명령에 대한 출력을 얻을 수 없습니다. 구문 상 수정이 필요한가?.
fasil

@ fasil 아니오, 작동해야합니다. 무엇이 문제입니까? 오류 메시지가 있습니까?
terdon

@terdon 완전한 명령에 대한 출력을 얻지 못합니다. #top -bn 2 -d 0.01 사용하면 전체 결과를 얻을 수 있지만 grep '^ % Cpu'를 추가하면 프롬프트가 no를 반환하지 않습니다. 오류 ...
fasil

9

sar그것을하는 확실한 방법입니다. 예를 들어 sar -u다음과 같이 출력됩니다.

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78

어떤 Linux를 사용하는지 말하지 않지만 CentOS / RedHat의 경우 sysstat패키지 를 설치해야하며 데비안 / 우분투에서도 동일하다고 생각합니다.

또한 통계 수집 SAR를 사용할 수있는 임시을 :

sar -o /tmp/sar.out 60 600

600 초마다 60 초마다 60 초마다 통계를 수집합니다.


1
당신은 아마 그것을 다르게 표현해야합니다. 게시 한 줄은 60 초마다 600 번 측정됩니다. 내가 당신의 게시물을 읽는 방식은 600이 지속 시간이라는 것이므로 30 600을 넣으면 600 분 동안 30 초마다 걸리지 만 실제로는 30 초마다 600 번 걸립니다.
James McDonnell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.