프로세스 경로

프로세스 경로

프로세스의 메모리/CPU 사용량을 실시간으로 모니터링하고 싶습니다. 비슷 top하지만 하나의 프로세스에 대해서만 일종의 기록 그래프를 갖는 것이 더 좋습니다.

답변1

Linux에서는 top당연히 기록 그래프가 없지만 단일 프로세스를 따르는 것이 실제로 지원됩니다.

top -p PID

이는 Mac OS X에서도 사용할 수 있지만 구문이 다릅니다.

top -pid PID

답변2

프로세스 경로

2020 업데이트(Linux/procfs에만 해당) 종종 프로세스 분석 문제로 돌아가서 처음에 아래에 설명했던 솔루션에 만족하지 못하고 다음과 같이 글을 쓰기로 결정했습니다.내 거. 이는 순수한 Python CLI 패키지로, 여러 가지 종속성(무거운 Matplotlib 제외)을 포함하고 잠재적으로 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패키지가 바로 그 역할을 합니다.

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'

차트는 다음과 같습니다. ps 레코드 예

메모리 분석기

이것RSS 전용 샘플링(및 일부 Python 관련 옵션)을 제공합니다. 또한 프로세스와 해당 하위 프로세스를 기록할 수도 있습니다(참고자료 참조 mprof --help).

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

기본적으로 내보낼 수 있는 Tkinter 기반( python-tk필요할 수 있음) 차트 브라우저가 팝업됩니다.

교수

흑연 스택 및 통계

이는 단순한 일회성 테스트에는 과잉으로 보일 수 있지만 며칠 동안 디버깅하는 경우에는 확실히 합리적입니다. 편리한 올인원 머신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"

그런 다음 라인을 실행하십시오 telegraf --config minconf.conf. Grafana 부분은 메트릭 이름을 제외하고 동일합니다.

PID 통계

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

답변3

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

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

정말로, 당신은 그것을 시도해야 합니다 htop. top처음 사용한 이후로 다시 시작한 적이 없습니다 htop.

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

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
  ....

관련 정보