프로세스의 최대 CPU 사용량 가져오기

프로세스의 최대 CPU 사용량 가져오기

프로세스의 최대 사용량을 얻을 수 있습니까?

"top" 및 "ps"와 같은 도구는 즉각적인 CPU 사용량을 출력하는 것 같습니다. 그리고 "pidstat"는 평균에 도달한 것 같습니다...

하지만 스파이크를 눈치 챈 사람이 있나요?

답변1

기본적으로 이 정보가 포함된 파일은 없는 것 같습니다.

타사 도구를 통해 이를 기록한 다음 계산해야 합니다.

예를 들어 다음 스크립트를 사용합니다.

while true; do uptime >> uptime.log; sleep 1; done

그런 다음 몇 가지 처리를 수행하고 예를 들어 awk원하는 데이터를 가져옵니다 .

그러면 분당 로드가 제공됩니다.

awk  '{print $1, substr($8, 1, length($8)-1)}' uptime.log

이제 최대 사용량을 얻을 수 있습니다.

답변2

가능한 해결책은 ps쉘 스크립트를 사용하고 제안한 대로 크론을 예약하는 것입니다.

쉘 스크립트는 프로세스의 현재 CPU 사용량을 가져와서 이전 최대값과 비교하고 더 큰 경우 파일을 업데이트해야 합니다.

#!/bin/bash

CURRENT_VALUE=`ps -p 3445 -o %cpu | sed -n '2p'`
PREVIOUS_VALUE=`sed -n '2p' max_cpu_usage_of_pid.sh.out`

if (( $(echo "$PREVIOUS_VALUE $CURRENT_VALUE" | awk '{print ($1 > $2)}') )); then
        ps -p 3445 -o %cpu > max_cpu_usage_of_pid.sh.out
fi
  • 참고 1: max_cpu_usage_of_pid.sh.out 파일이 존재해야 합니다.
  • 참고 2: bash 스크립트에서 두 개의 십진수를 비교하는 데 약간의 어려움이 있습니다. 이것이 해결되었습니다

추신: 저는 bash 스크립팅 전문가가 아닙니다. 어떤 개선이나 제안이라도 환영합니다 :)

답변3

짧은 대답은 없음이거나 아마도 당신이 찾고 있는 것이 아닐 것입니다.

프로세스 CPU 통계는 대부분 누적됩니다. 운영 체제는 매 순간 스케줄러를 사용하여 실행할 프로세스를 결정하므로 특정 시점에서 최소 시간 값으로 범위를 좁히면 프로세스가 CPU를 100% 사용하게 됩니다. 다중 코어의 경우 사용 가능한 프로세서 수는 1/N입니다.

이를 얻는 유일한 방법은 더 긴 표본 크기를 사용한 다음 누적 값을 계속 살펴보는 것입니다. 이것이 실제로 top이 작동하는 방식입니다. 사용자 jiffy 카운터가 이전에 100이었고 현재 150이라면 이제 해당 기간 동안 50 jiffy의 CPU가 "소비"되었음을 알 수 있습니다. 시스템 카운터를 보면 해당 비율을 확인할 수 있습니다.

따라서 새로 고침 시간이 짧고 배치 모드를 사용하여 실행과 같은 작업을 수행할 수 있습니다. 이는 귀하의 요구 사항에 적합할 수 있지만 왜 이것이 필요한지 궁금하며 시스템에 대한 질문에 답할 수 있습니까?

관련 정보