Я хотів би відслідковувати використання пам'яті / процесора одного процесу в режимі реального часу. Подібний, top
але орієнтований лише на один процес, бажано з графіком історії певного роду.
Я хотів би відслідковувати використання пам'яті / процесора одного процесу в режимі реального часу. Подібний, top
але орієнтований лише на один процес, бажано з графіком історії певного роду.
Відповіді:
У 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
. У ньому є ... Кольори! Прості комбінації клавіш! Прокрутіть список за допомогою клавіш зі стрілками! Вбийте процес, не виходячи і не беручи до уваги ПІД! Позначте кілька процесів і вбийте їх усіх!
Серед усіх функцій на сторінці вказується, що ви можете натиснути, Fщоб слідкувати за процесом.
Дійсно, слід спробувати htop
. Я ніколи не починав top
знову, після першого разу використовував htop
.
Відображення одного процесу:
htop -p PID
top
також має кольори. Натисніть z
.
top
має кольори! Шкода, що його кольори досить марні, особливо в порівнянні з htop
(що зникає процесів інших користувачів та підкреслює базову назву програми).
htop -p PID
теж буде працювати, подібно до прикладу, поданого @Michael Mrozek.
Наведені нижче адреси якогось графіку історії історії . psrecord
Пакет Python робить саме це.
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
Зручне все-в-одному (від авторів Графани) зображення 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.*'
Потім відкривши Grafana за адресою http: // localhost: 8080 , автентифікацію як 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
. Графана частина однакова, за винятком імен метрик.
sysdig
(доступно в репортажах Debian і Ubuntu) з інтерфейсом інтерфейсу, який перевіряє sysdig, виглядають дуже перспективно, надаючи надзвичайно дрібні деталі разом із використанням процесора та RSS, але, на жаль, інтерфейс не в змозі їх відобразити і sysdig
не може фільтрувати procinfo
події за допомогою процесу в час написання. Хоча це має бути можливо за допомогою спеціального зубила ( sysdig
розширення, написане в Луа).
pgrep --help
на допомогу. Там принаймні --newest
і --oldest
.
Ctrl+C
psrecord: процес 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 - під
Для зазначеного $ nPid він вимірює середнє 10 знімків використання процесора протягом 1 секунди (затримка 0,1 сек кожен * nTimes = 10); що забезпечує хороший і швидкий точний результат того, що відбувається в той самий момент.
Налаштуйте змінні відповідно до ваших потреб.
$nPercCpu
): оболонка, верх, греп, sed, вирізати ... до н.е. Багато, якщо не все це ви могли, наприклад, об'єднати в сценарій 1 Sed або Awk.
top
вихід ' є середнім $delay
. Ср. Як розрахувати використання процесора
Я зазвичай використовую наступні два:
Супорт HP : його дуже хороший інструмент для моніторингу процесів, ви також можете перевірити графік викликів та іншу інформацію низького рівня. Але зауважте, що вона безкоштовна лише для особистого користування.
daemontools : набір інструментів для управління послугами UNIX
Використовуючи top
та awk
можна легко створити, наприклад, журнал, розділений комами,% CPU ( $9
) +% MEM ( $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 -p $(pidof <process_name>)
Якщо у вас є скорочений дистрибутив Linux, де у верхній частині немає опції для процесу (-p) або пов'язаних з цим параметрів, ви можете проаналізувати висновок верхньої команди для імені вашого процесу, щоб отримати інформацію про використання процесора на процес.
while true; do top -bn1 | awk '/your_process_name/ {print $8}' ; sleep 1; done
8 представляє використання процесора на процес у висновку верхньої команди в моєму вбудованому дистрибутиві Linux
Недостатньо репутації для коментування, але для psrecord ви можете також зателефонувати йому безпосередньо, програмно, безпосередньо в Python:
from psrecord.main import monitor
monitor(<pid number>, logfile = "./test.log", plot="./fig.png", include_children=True)
Якщо вам потрібні середні показники за певний період певного процесу, спробуйте накопичувальну опцію -c вгорі:
top -c a -pid PID
"-c a" знайдено в топі для Mac 10.8.5.
Для Scientific Linux опція -S, яку можна встановити інтерактивно.
top
фактично надається ця функція. Моя версія на Fedora 19 не відповідає. Те саме і на Ubuntu 13.04.