Я хотів би відслідковувати використання пам'яті / процесора одного процесу в режимі реального часу. Подібний, 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+Cpsrecord: процес 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.