Как отслеживать использование процессора /памяти в одном процессе?

Я хотел бы отслеживать использование памяти /процессора процессора в режиме реального времени. Подобно top, но нацелен только на один процесс, желательно с каким-то историческим графиком.

113 голосов | спросил Josh K 17 AM00000070000005831 2010, 07:21:58

8 ответов


106

В Linux top фактически поддерживает фокусировку на одном процессе, хотя он, естественно, не имеет графика истории:

top -p PID

Это также доступно в Mac OS X с другим синтаксисом:

top -pid PID
ответил Michael Mrozek 17 AM00000070000003031 2010, 07:27:30
50

htop - отличная замена top. Он имеет ... Цвета! Простые сочетания клавиш! Прокрутите список с помощью клавиш со стрелками! Убейте процесс, не выходя и не принимая во внимание PID! Отметьте несколько процессов и убейте их всех!

Среди всех функций manpage говорит, что вы можете нажать F на следовать за процессом.

Действительно, вы должны попробовать htop. Я больше не запускал top, после первого использования htop.

Отобразить один процесс:

htop -p PID

ответил Denilson Sá Maia 18 AM00000020000003731 2010, 02:47:37
12

psrecord

Следующие адреса исторический график какого-либо типа . Пакет Python 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 example

memory_profiler

пакет предоставляет выборку только для RSS (плюс некоторые параметры, специфичные для Python). Он также может записывать процесс со своими дочерними процессами (см. mprof --help).

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

По умолчанию это всплывает на основе Tkinter (возможно, код )), который может быть экспортирован:

 mprof

графитовый стек & statsd

Это может показаться излишним для простого одноразового теста, но для чего-то вроде многодневной отладки это, безусловно, разумно. Удобное многофункциональное устройство python-tk (от авторов Grafana) и raintank/graphite-stack и psutil клиент. statsd обеспечивает реализацию.

procmon.py

Затем в другом терминале после запуска целевого процесса:

$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack

Затем открытие Grafana на http: //localhost: 8080 , аутентификация как $ sudo apt-get install python-statsd python-psutil # or via pip $ python procmon.py -s localhost -f chromium -r 'chromium.*' , установив источник данных https: //localhost , вы можете построить график, например:

 grafana chart

графитовый стек & Telegraf

Вместо сценария Python, отправляющего метрики в Statsd, admin:admin telegraf) можно использовать для непосредственного отправки метрик на графит.

Минимальная конфигурация procstat выглядит следующим образом:

telegraf

Затем запустите строку [agent] interval = "1s" [[outputs.graphite]] servers = ["localhost:2003"] prefix = "testprfx" [[inputs.procstat]] pid_file = "/path/to/file/with.pid" . Часть Grafana одинакова, кроме имен метрик.

sysdig

telegraf --config minconf.conf (доступно в репозиториях Debian и Ubuntu) с sysdig-inspect Пользовательский интерфейс выглядит очень многообещающим, обеспечивая чрезвычайно мелкие детали, а также использование ЦП и RSS, но к сожалению, пользовательский интерфейс не может их отобразить, а sysdig не может фильтровать sysdig событие по процессу на момент написания. Хотя это должно быть возможно с помощью специального долота (расширение procinfo, написанное в Lua).

ответил saaj 4 Jpm1000000pmThu, 04 Jan 2018 16:38:44 +030018 2018, 16:38:44
8

Чтобы использовать эту информацию в скрипте, вы можете сделать это:

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 он будет измерять среднее из 10 снимков использования процессора в течение 1 секунды (задержка 0,1 с каждый * nTimes = 10); что обеспечивает хороший и быстрый точный результат того, что происходит в данный момент.

Подключите переменные к вашим потребностям.

ответил Aquarius Power 30 J0000006Europe/Moscow 2013, 08:31:50
5

Я обычно использую следующие два:

  1. суппорт HP : его очень хороший инструмент для мониторинга процессов, вы также можете проверить график вызовов и другую информацию низкого уровня. Но, пожалуйста, обратите внимание, что это бесплатно только для личного использования.

  2. daemontools : набор инструментов для управления службами UNIX

ответил Hemant 17 PM000000120000001331 2010, 12:59:13
1

Если вы знаете имя процесса, вы можете использовать

top -p $(pidof <process_name>)
ответил user4757345 29 PMpWed, 29 Apr 2015 18:03:01 +030003Wednesday 2015, 18:03:01
0

Если вам нужны средние значения в течение определенного периода времени для определенного процесса, попробуйте использовать накопленную -c опцию top:

top -c a -pid PID

"- c a" найдено в верхней части для Mac 10.8.5.

Для Scientific Linux опция -S, которая может быть установлена ​​в интерактивном режиме.

ответил Kieleth 12 Mayam14 2014, 02:09:38
0

Если у вас есть вырезанный дистрибутив Linux, где top не имеет параметра для каждого процесса (-p) или связанных с ним параметров, вы можете проанализировать вывод верхней команды для имени процесса, чтобы получить информацию об использовании ЦП на каждый процесс.

while true;  do top -bn1 | awk '/your_process_name/ {print  $8}' ; sleep 1; done

8 представляет собой использование ЦП для каждого процесса в выходе верхней команды в моем встроенном дистрибутиве Linux

ответил Razan Paul 3 MaramFri, 03 Mar 2017 08:37:58 +03002017-03-03T08:37:58+03:0008 2017, 08:37:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132