답변:
ps -p <pid> -o %cpu,%mem,cmd
"cmd"를 사용하지 않아도되지만 디버깅에 도움이 될 수 있습니다.
이것은 프로세스가 실행되고있는 동안 프로세스의 평균 CPU 사용량을 나타냅니다.
| tail -n +2
ps
. 이것은 실제 CPU 사용 시간 이 아닙니다 . top
예를 들어 보여 지는 것과 매우 다를 수도 있습니다 .
ps -e -o pcpu,args
이 프로세스의 수명 동안 CPU 평균을 표시합니다. 장기 실행 프로세스 인 경우 분명히 원하는 것은 아닙니다.
프로세스 이름을 사용하여 결과를 얻을 수 있습니다.
ps -C chrome -o %cpu,%mem,cmd
이 -C
옵션을 사용하면 프로세스 이름을 pid를 몰라도 사용할 수 있습니다.
pid
만 작동합니다. ps -C chrome -o pid,%cpu,%mem,cmd
ps
명령 (사용하지 않아야 함) :
top
명령 (사용해야 함) :
top
실시간으로 CPU 사용량을 얻는 데 사용 합니다 (현재 짧은 간격).
top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'
다음과 같이 반향됩니다. 78.6
-b
: 배치 모드-n 2
: 반복 횟수, 다음 2
이유로 인해 사용 : 처음 실행할 때 비교할 이전 샘플이 없으므로 이러한 초기 값은 부팅 이후의 백분율입니다.-d 0.2
: 지연 시간 (초, 200ms)-p 6962
: 모니터 -PIDtail -1
: 마지막 행awk '{print $9}'
: 9 번째 열 (CPU 사용량)프로그램을 시작하고 모니터링
이 양식은 실행 파일을 쉽게 벤치마킹하려는 경우에 유용합니다.
topp() (
$* &>/dev/null &
pid="$!"
trap ':' INT
echo 'CPU MEM'
while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
kill "$pid"
)
topp ./myprog arg1 arg2
이제 Ctrl + C를 누르면 프로그램이 종료되고 모니터링이 중지됩니다. 샘플 출력 :
CPU MEM
20.0 1.3
35.0 1.3
40.0 1.3
관련 : /unix/554/how-to-monitor-cpu-memory-usage-of-a-single-process
우분투 16.04에서 테스트되었습니다.
응용 프로그램의 메모리 사용량을 얻으려면 사용하는 공유 라이브러리와 달리 Linux smaps 인터페이스를 사용해야합니다. 이 답변은 잘 설명되어 있습니다 .
여기의 모든 답변은 PID의 메모리 백분율 만 표시합니다.
다음은 모든 아파치 프로세스에서 rss 메모리 사용량을 KB 단위로 가져 오는 방법의 예입니다. 특정 PID 만보고 싶다면 "grep apache"를 "grep PID"로 바꾸십시오.
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$6}'"
인쇄합니다 :
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$6}'
Thu Jan 25 15:44:13 2018
12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360
CPU %로 :
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$3,\$6}'"
산출:
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$3,$6}'
Thu Jan 25 15:46:00 2018
12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360
다음 명령은 특정 프로세스에 대해 40 초마다 평균 CPU 및 메모리 사용량을 가져옵니다 (pid)
pidstat 40 -ru -p <pid>
내 경우에 대한 출력 (CPU 사용을 위해 처음 두 줄, 메모리를 위해 두 번째 두 줄) :
02:15:07 PM PID %usr %system %guest %CPU CPU Command
02:15:47 PM 24563 0.65 0.07 0.00 0.73 3 java
02:15:07 PM PID minflt/s majflt/s VSZ RSS %MEM Command
02:15:47 PM 24563 6.95 0.00 13047972 2123268 6.52 java
@ caf의 답변을 바탕으로, 이것은 나에게 잘 작동합니다.
주어진 PID의 평균을 계산하십시오.
measure.sh
times=100
total=0
for i in $(seq 1 $times)
do
OUTPUT=$(top -b -n 1 -d 0.1 -p $1 | tail -1 | awk '{print $9}')
echo -n "$i time: ${OUTPUT}"\\r
total=`echo "$total + $OUTPUT" | bc -l`
done
#echo "Average: $total / $times" | bc
average=`echo "scale=2; $total / $times" | bc`
echo "Average: $average"
용법:
# send PID as argument
sh measure.sh 3282
Linux에서 단일 프로세스의 CPU 및 메모리 사용량 또는 아래 명령을 사용하여 상위 10 개의 CPU 활용 프로세스를 얻을 수 있습니다.
ps -aux --sort -pcpu | 머리 -n 11