답변:
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 부분은 동일합니다.
sysdigsysdig-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에서도 마찬가지입니다.