답변:
Linux에서는 top
실제로 히스토리 그래프가 없지만 단일 프로세스에 대한 초점을 실제로 지원합니다.
top -p PID
Mac OS X에서도 다른 구문으로 사용할 수 있습니다.
top -pid PID
top -p `pgrep -f /usr/bin/kvm`
.
hostname
_pid.txt; exit'and
htop
에 대한 훌륭한 대체품 top
입니다. 그것은 ... 색상! 간단한 키보드 단축키! 화살표 키를 사용하여 목록을 스크롤하십시오! PID를 남기지 않고 기록하지 않고 프로세스를 종료하십시오! 여러 프로세스를 표시하고 모두 종료하십시오!
모든 기능 중 맨 페이지 에 프로세스 F를 따르 려면을 (를) 누르 십시오 .
정말로, 당신은 시도해야합니다 htop
. top
처음 사용한 후에는 다시 시작하지 않았습니다 htop
.
단일 프로세스를 표시하십시오.
htop -p PID
top
색상도 있습니다. 를 누릅니다 z
.
top
색상이 있습니다! 색상이 너무 나쁘면, 특히 htop
다른 사용자 프로세스를 희미하게하고 프로그램 기본 이름을 강조하는 것과 비교할 때 특히 쓸모가 없습니다 .
htop -p PID
단지 @Michael Mrozek에 의해 주어진 예제와도 작동합니다.
다음은 일종의 히스토리 그래프를 설명합니다 . 파이썬 psrecord
패키지는 이것을 정확하게 수행합니다.
pip install psrecord # local user install
sudo apt-get install python-matplotlib python-tk # for plotting; or via pip
단일 프로세스의 경우 다음과 같습니다 (에 의해 중지됨 Ctrl+C).
psrecord $(pgrep proc-name1) --interval 1 --plot plot1.png
여러 프로세스에서 다음 스크립트는 차트를 동기화하는 데 도움이됩니다.
#!/bin/bash
psrecord $(pgrep proc-name1) --interval 1 --duration 60 --plot plot1.png &
P1=$!
psrecord $(pgrep proc-name2) --interval 1 --duration 60 --plot plot2.png &
P2=$!
wait $P1 $P2
echo 'Done'
이 패키지 는 RSS 전용 샘플링과 일부 Python 관련 옵션을 제공합니다. 또한 자식 프로세스와 함께 프로세스를 기록 할 수도 있습니다 (참조 mprof --help
).
pip install memory_profiler
mprof run /path/to/executable
mprof plot
기본적으로 이것은 python-tk
내보낼 수 있는 Tkinter 기반 ( 필요할 수도 있음) 차트 탐색기를 팝업합니다 .
간단한 일회성 테스트에는 과잉으로 보일 수 있지만 며칠 동안의 디버깅과 같은 것은 확실히 합리적입니다. 편리한 올인원 raintank/graphite-stack
(Grafana 작가의 이미지) 이미지 psutil
및 statsd
클라이언트. procmon.py
구현을 제공합니다.
$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack
그런 다음 대상 프로세스를 시작한 후 다른 터미널에서 :
$ sudo apt-get install python-statsd python-psutil # or via pip
$ python procmon.py -s localhost -f chromium -r 'chromium.*'
그런 다음 http : // localhost : 8080 에서 Grafana를 열고 authentication as admin:admin
을 설정하고 datasource https : // localhost 를 설정하면 다음과 같은 차트를 그릴 수 있습니다.
통계를 Statsd로 전송하는 Python 스크립트 telegraf
(및 procstat
입력 플러그인) 대신 Graphite로 직접 전송하는 데 사용할 수 있습니다.
최소 telegraf
구성은 다음과 같습니다.
[agent]
interval = "1s"
[[outputs.graphite]]
servers = ["localhost:2003"]
prefix = "testprfx"
[[inputs.procstat]]
pid_file = "/path/to/file/with.pid"
그런 다음 line을 실행하십시오 telegraf --config minconf.conf
. 메트릭 이름을 제외하고 Grafana 부분은 동일합니다.
sysdig
sysdig-inspect UI를 사용하여 (Debian 및 Ubuntu의 repos에서 사용 가능) CPU 사용률 및 RSS와 함께 매우 세밀한 세부 정보를 제공하지만 매우 유망하게 보이지만 불행히도 UI는 렌더링 할 sysdig
수 없으며 procinfo
프로세스별로 이벤트를 필터링 할 수 없습니다 . 쓰기 시간. 그러나 이것은 맞춤 끌 ( sysdig
루아로 작성된 확장) 으로 가능해야합니다 .
pgrep --help
구조에 @EralpB . 적어도있다 --newest
및 --oldest
.
Ctrl+C
은 psrecord 프로세스에서 플롯을 저장하지 않고 종료되므로 테스트 대상 프로세스를 종료해야합니다.
스크립트에서 해당 정보를 사용하려면 다음을 수행하십시오.
calcPercCpu.sh
#!/bin/bash
nPid=$1;
nTimes=10; # customize it
delay=0.1; # customize it
strCalc=`top -d $delay -b -n $nTimes -p $nPid \
|grep $nPid \
|sed -r -e "s;\s\s*; ;g" -e "s;^ *;;" \
|cut -d' ' -f9 \
|tr '\n' '+' \
|sed -r -e "s;(.*)[+]$;\1;" -e "s/.*/scale=2;(&)\/$nTimes/"`;
nPercCpu=`echo "$strCalc" |bc -l`
echo $nPercCpu
다음과 같이 사용하십시오. calcPercCpu.sh 1234
여기서 1234는 pid입니다.
지정된 $ nPid의 경우 전체 1 초 동안 CPU 사용량 의 평균 10 개 스냅 샷을 측정합니다 (각 0.1 초 지연 * nTimes = 10). 그것은 현재 일어나고있는 일에 대한 정확하고 빠른 결과를 제공합니다.
필요에 따라 변수를 조정하십시오.
$nPercCpu
쉘, 탑, grep, sed, cut ... bc : 10 개의 프로세스를 호출하여 1 개의 숫자 ( ) 를 검색한다는 사실이 마음에 들지 않습니다 . 예를 들어 1 Sed 또는 Awk 스크립트로 병합 할 수있는 것은 아닙니다.
나는 일반적으로 다음 두 가지를 사용합니다.
HP 캘리퍼 : 프로세스 모니터링을위한 매우 유용한 도구로, 통화 그래프 및 기타 저수준 정보도 확인할 수 있습니다. 그러나 개인 용도로만 무료로 제공됩니다.
daemontools : UNIX 서비스 관리를위한 도구 모음
를 사용하면 쉼표로 구분 된 % CPU ( ) + % MEM ( ) 사용 로그를 쉽게 생성 할 수 top
있으며,이 awk
로그 는 나중에 통계 및 그래프 도구에 제공 할 수 있습니다.$9
$10
top -b -d $delay -p $pid | awk -v OFS="," '$1+0>0 {
print strftime("%Y-%m-%d %H:%M:%S"),$1,$NF,$9,$10; fflush() }'
출력은 다음과 같습니다
2019-03-26 17:43:47,2991,firefox,13.0,5.2
2019-03-26 17:43:48,2991,firefox,4.0,5.2
2019-03-26 17:43:49,2991,firefox,64.0,5.3
2019-03-26 17:43:50,2991,firefox,71.3,5.4
2019-03-26 17:43:51,2991,firefox,67.0,5.4
$delay
그러나 출력 타임 스탬프가 실제로 출력 방식에 $delay
따라 뒤쳐져 있기 때문에 큰 결과는 좋지 않습니다 top
. 너무 자세하게 설명하지 않고 간단한 해결 방법은 다음과 같이 제공된 시간을 기록하는 것입니다 top
.
top -b -d $delay -p $pid | awk -v OFS="," '$1=="top"{ time=$3 }
$1+0>0 { print time,$1,$NF,$9,$10; fflush() }'
그러면 타임 스탬프는 정확하지만 출력은 여전히 지연됩니다 $delay
.
특정 프로세스 기간 동안 평균이 필요한 경우 top의 accumulative -c 옵션을 시도하십시오.
top -c a -pid PID
Mac 10.8.5 용 상단에서 "-c a"를 찾았습니다.
Scientific Linux의 경우 옵션은 -S이며 대화식으로 설정할 수 있습니다.
top
실제로이 기능을 제공 하는 버전에 대한 자세한 내용을 추가하고 싶을 것 입니다. Fedora 19의 내 버전은 그렇지 않습니다. 우분투 13.04에서도 마찬가지입니다.