프로패스

프로패스

하나의 프로세스의 메모리/CPU 사용량을 실시간으로 모니터링하고 싶습니다. 유사 top하지만 하나의 프로세스만을 대상으로 하며, 일종의 기록 그래프를 사용하는 것이 좋습니다.

답변1

Linux에서는 top당연히 기록 그래프가 없지만 실제로 단일 프로세스에 초점을 맞추는 것을 지원합니다.

top -p PID

이는 다른 구문을 사용하여 Mac OS X에서도 사용할 수 있습니다.

top -pid PID

답변2

프로패스

2020 업데이트(Linux/procfs 전용). 프로세스 분석의 문제로 충분히 자주 돌아가서 원래 아래에 설명된 솔루션에 만족하지 않고 글을 쓰기로 결정했습니다.내 자신의. 몇 가지 종속성(무거운 Matplotlib 없음)을 포함하는 순수 Python CLI 패키지이며 procfs, 프로세스 트리에 대한 JSONPath 쿼리의 많은 메트릭을 잠재적으로 플롯할 수 있으며 기본 데시메이션/집계(Ramer-Douglas-Peucker 및 이동 평균), 필터링 기능이 있습니다. 시간 범위와 PID 및 기타 몇 가지 사항을 기준으로 합니다.

pip3 install --user procpath

다음은 Firefox의 예입니다. 이는 "firefox"가 포함된 모든 프로세스 cmdline(PID에 의한 쿼리는 다음과 같음 '$..children[?(@.stat.pid == 42)]')를 초당 120회 기록합니다.

procpath record -i 1 -r 120 -d ff.sqlite '$..children[?("firefox" in @.cmdline)]'

기록된 전체 프로세스 중 단일 프로세스(또는 여러 프로세스)의 RSS 및 CPU 사용량을 플로팅하면 다음과 같습니다.

procpath plot -d ff.sqlite -q cpu -p 123 -f cpu.svg
procpath plot -d ff.sqlite -q rss -p 123 -f rss.svg

차트는 다음과 같습니다(실제로는 대화형 Pygal SVG입니다).

RSS CPU

psrecord

다음 주소일종의 기록 그래프. 파이썬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'

차트는 다음과 같습니다. psrecord 예

memory_profiler

그만큼패키지RSS 전용 샘플링(및 일부 Python 관련 옵션)을 제공합니다. 또한 하위 프로세스와 함께 프로세스를 기록할 수도 있습니다(참조 mprof --help).

pip install memory_profiler
mprof run /path/to/executable
mprof plot

기본적으로 내보낼 수 있는 Tkinter 기반( python-tk필요할 수 있음) 차트 탐색기가 나타납니다.

Mprof

흑연 스택 및 통계

간단한 일회성 테스트에는 과잉으로 보일 수 있지만 며칠 동안 디버깅하는 경우에는 확실히 합리적입니다. 편리한 올인원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를 열고 로 인증하고 admin:admin데이터 소스 https://localhost를 설정하면 다음과 같은 차트를 그릴 수 있습니다.

그라파나 차트

흑연 스택 및 텔레그라프

Python 스크립트가 측정항목을 Statsd로 보내는 대신,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 부분은 메트릭 이름을 제외하고 동일합니다.

pidstat

pidstat(패키지의 일부 sysstat)는 쉽게 구문 분석할 수 있는 출력을 생성할 수 있습니다. 프로세스에서 추가 측정항목이 필요한 경우에 유용합니다. 예를 들어 가장 유용한 3개 그룹(CPU, 메모리 및 디스크)에는 %usr, %system, %guest, %CPU, minflt/s, majflt/s, VSZ, RSS, %MEM, kB_rd/s, kB_wr/s, 가 포함됩니다 kB_ccwr/s. 나는 그것을 설명했다.관련 답변.

답변3

htop은(는) 훌륭한 대체품입니다 top. 그것은… 색상을 가지고 있습니다! 간단한 키보드 단축키! 화살표 키를 사용하여 목록을 스크롤하세요! PID를 기록하지 않고 떠나지 않고 프로세스를 종료하십시오! 여러 프로세스를 표시하고 모두 종료하세요!

모든 기능 중에서 맨페이지에는 F다음을 수행할 수 있다고 나와 있습니다.따르다프로세스.

정말로, 당신은 시도해야 합니다 htop. .tophtop

단일 프로세스를 표시합니다.

htop -p PID

답변4

조금 늦었지만 기본값만 사용하여 명령줄 트릭을 공유하겠습니다.ps

WATCHED_PID=$({ command_to_profile >log.stdout 2>log.stderr & } && echo $!);
while ps -p $WATCHED_PID --no-headers --format "etime pid %cpu %mem rss"; do 
   sleep 1 
done

나는 이것을 하나의 라이너로 사용합니다. 여기서 첫 번째 줄은 명령을 실행하고 PID를 변수에 저장합니다. 그런 다음 ps는 경과 시간, PID, CPU 사용 비율, 메모리 비율, RSS 메모리를 인쇄합니다. 다른 필드도 추가할 수 있습니다.

프로세스가 종료되자마자 ps명령은 "성공"을 반환하지 않고 while루프가 종료됩니다.

프로파일링하려는 PID가 이미 실행 중인 경우 첫 번째 줄을 무시할 수 있습니다. 원하는 ID를 변수에 넣기만 하면 됩니다.

다음과 같은 출력이 표시됩니다.

  00:00  7805  0.0  0.0  2784
  00:01  7805 99.0  0.8 63876
  00:02  7805 99.5  1.3 104532
  00:03  7805  100  1.6 129876
  00:04  7805  100  2.1 170796
  00:05  7805  100  2.9 234984
  00:06  7805  100  3.7 297552
  00:07  7805  100  4.0 319464
  00:08  7805  100  4.2 337680
  00:09  7805  100  4.5 358800
  00:10  7805  100  4.7 371736
  ....

관련 정보