Linux에서 단일 프로세스의 CPU 사용량 및 메모리 사용량을 검색 하시겠습니까?


164

Linux에서 단일 프로세스의 CPU 및 메모리 사용을 원합니다. PID를 알고 있습니다. 다행히도 'watch'명령을 사용하여 1 초마다 가져 와서 CSV에 쓸 수 있기를 바랍니다. Linux 명령 행에서이 정보를 얻는 데 어떤 명령을 사용할 수 있습니까?


11
수퍼 유저에 속합니다.
Richard

gdb를 사용하여 getpid 및 top -p <that pid>를 호출 할 수 있습니까?
mja

답변:


225
ps -p <pid> -o %cpu,%mem,cmd

"cmd"를 사용하지 않아도되지만 디버깅에 도움이 될 수 있습니다.

이것은 프로세스가 실행되고있는 동안 프로세스의 평균 CPU 사용량을 나타냅니다.


6
단일 프로세스의 메모리 사용량을 이와 같이 모니터링하기에 충분히 신경 쓰면 상당한 양의 메모리를 사용하므로 공유 매핑으로 인한 여분의 메가 바이트가 문제가되지 않습니다.
caf

4
@Chaitanya : 그것을 통해 파이프| tail -n +2
caf

11
또는 --noheader
hexacyanide를

45
% cpu는 "사용 된 CPU 시간을 프로세스가 실행 된 시간 (cputime / realtime ratio)으로 나눈 값 (백분율로 표시됨)"(맨 페이지 참조)을 명심하십시오 ps. 이것은 실제 CPU 사용 시간 이 아닙니다 . top예를 들어 보여 지는 것과 매우 다를 수도 있습니다 .
xebeche

12
위의 Xebeche에서 말했듯 ps -e -o pcpu,args이 프로세스의 수명 동안 CPU 평균을 표시합니다. 장기 실행 프로세스 인 경우 분명히 원하는 것은 아닙니다.
Alex F


37

프로세스 이름을 사용하여 결과를 얻을 수 있습니다.

ps -C chrome -o %cpu,%mem,cmd

-C옵션을 사용하면 프로세스 이름을 pid를 몰라도 사용할 수 있습니다.


어떻게 pid를 포함 시키는가? 나는 % pid $ PID pid, PID with luck을 시도했습니다
Arnold Roa

@ArnoldRoa pid만 작동합니다. ps -C chrome -o pid,%cpu,%mem,cmd
Muhammad Taha

28

pidstat를 사용하십시오 (sysstat에서- 링크 참조 ).

예를 들어 5 초마다이 두 프로세스 ID (12345 및 11223)를 모니터링하려면

$ pidstat -h -r -u -v -p 12345,11223 5

2
pidstat훌륭한 명령임을 지적 해 주셔서 감사하며 스크립팅에도 편리합니다!
fduff

pidstat또한 좋은 평균을 제공합니다. 단지 수치 내가 좀 더 우아한 방법 발견하지 않았습니다pidstat -u 1 10 | grep ^Average | sort -r -n -b -k 8,8
북 - 브래들리를

24

ps 명령 (사용하지 않아야 함) :

top 명령 (사용해야 함) :

top실시간으로 CPU 사용량을 얻는 데 사용 합니다 (현재 짧은 간격).

top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'

다음과 같이 반향됩니다. 78.6


이것은 프로세스 수명 동안 평균이 아니라 현재 CPU 사용량을 얻는 가장 정확한 답변입니다.
Ted Feng

15

프로그램을 시작하고 모니터링

이 양식은 실행 파일을 쉽게 벤치마킹하려는 경우에 유용합니다.

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에서 테스트되었습니다.


5

top -b원하는 pid를 사용 하고 grep ( -b플래그 상단이 배치 모드로 실행 됨)하거나 -pgrep을 사용하지 않고 플래그를 사용하고 pid를 지정할 수도 있습니다 .


5

에 주석으로 카페의 대답 PS, 위의 당신에게 PCPU의 수명 평균을 줄 것이다 pidstat 경우에. 보다 정확한 결과를 얻으려면 top을 사용하십시오. 한 번 실행해야하는 경우 다음을 실행할 수 있습니다.

top -b -n 1 -p <PID>

또는 데이터와 헤더 만 처리하는 경우 :

top -b -n 1 -p <PID> | tail -3 | head -2

헤더가없는 경우 :

top -b -n 1 -p <PID> | tail -2 | head -1

3
ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr

또는 프로세스 당

ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql


1
ps aux|awk  '{print $2,$3,$4}'|grep PID

여기서 첫 번째 열은 PID, 두 번째 열 CPU 사용량, 세 번째 열 메모리 사용량입니다.


1
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep

PID-프로세스 ID

etime-프로세스 실행 / 실시간

% cpu-CPU 사용량

% mem-메모리 사용량

cmd-명령

프로세스 이름을 추적하려는 프로세스, mysql nginx php-fpm 등으로 바꾸십시오 ...


1

여기의 모든 답변은 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

1

왜 선택한 답변이 효과가 없는지 궁금해하는 사람들에게 :

ps -p <pid> -o %cpu,%mem

%cpu,와 사이에 스페이스가 없습니다 %mem.


1

이것은 다른 도구의 출력을 보면서 하나 이상의 프로그램을 실시간으로 따르는 좋은 방법입니다. watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"


1

다음 명령은 특정 프로세스에 대해 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

0

(MacOS 10.10에있는 경우 top의 누적 -c 옵션을 사용해보십시오.

top -c a -pid PID

(이 옵션은 Scientific Linux el6 및 RHEL6으로 시도한 다른 Linux에서는 사용할 수 없습니다.)


0

위의 최고 CPU 및 메모리 소비 프로세스 목록

        ps axo %cpu,%mem,command | sort -nr | head

0

@ 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

-2

Linux에서 단일 프로세스의 CPU 및 메모리 사용량 또는 아래 명령을 사용하여 상위 10 개의 CPU 활용 프로세스를 얻을 수 있습니다.

ps -aux --sort -pcpu | 머리 -n 11

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.