Я хотел бы контролировать использование памяти одним процессором / процессором в режиме реального времени. Аналогично, top
но нацелено только на один процесс, предпочтительно с каким-то графом истории.
shell
process
monitoring
top
Джош К
источник
источник
Ответы:
В Linux
top
фактически поддерживает фокусировку на одном процессе, хотя у него, естественно, нет графа истории:Это также доступно в Mac OS X с другим синтаксисом:
источник
top -p `pgrep -f /usr/bin/kvm`
.hostname
_pid.txt; exit'andhtop
это отличная заменаtop
. У него есть ... Цвета! Простые сочетания клавиш! Прокрутите список с помощью клавиш со стрелками! Убейте процесс, не выходя и не принимая к сведению PID! Отметьте несколько процессов и убейте их всех!На этой странице руководства сказано, что вы можете нажать, Fчтобы следить за процессом.
На самом деле, вы должны попробовать
htop
. Я никогда не начиналtop
снова, после первого раза, когда я использовалhtop
.Показать один процесс:
htop -p PID
источник
top
также имеет цвета. Нажмитеz
.top
имеет цвета! Жаль, что его цвета совершенно бесполезны, особенно по сравнению сhtop
(который затухает в процессах других пользователей и выделяет базовое имя программы).htop -p PID
будет работать так же, как пример @Michael Mrozek.psrecord
Следующий адрес истории граф какой-то .
psrecord
Пакет Python делает именно это.Для одного процесса это следующее (остановлено Ctrl+C):
Для нескольких процессов следующий скрипт полезен для синхронизации графиков:
Графики выглядят так:
memory_profiler
Пакет предоставляет RSS-только выборки (плюс некоторые Python конкретных вариантов). Он также может записывать процесс со своими дочерними процессами (см.
mprof --help
).По умолчанию появляется всплывающий (
python-tk
возможно, необходимый) проводник диаграмм на основе Tkinter, который можно экспортировать:стек графита и статистика
Это может показаться излишним для простого одноразового теста, но для чего-то вроде отладки на несколько дней это, конечно, разумно. Удобный
raintank/graphite-stack
универсальный (от авторов Grafana) образpsutil
иstatsd
клиент.procmon.py
обеспечивает реализацию.Затем в другом терминале после запуска целевого процесса:
Затем, открыв Grafana по адресу http: // localhost: 8080 , аутентифицируя как
admin:admin
, настроив источник данных https: // localhost , вы можете построить диаграмму, например:графитовый стек и телеграф
Вместо сценария Python отправка метрик в Statsd
telegraf
(иprocstat
плагин ввода) может использоваться для прямой отправки метрик в Graphite.Минимальная
telegraf
конфигурация выглядит так:Затем запустите линию
telegraf --config minconf.conf
. Графана часть такая же, кроме метрик имен.sysdig
sysdig
(доступно в репозиториях Debian и Ubuntu) с sysdig-inspect UI выглядит очень многообещающе, предоставляя чрезвычайно детализированные детали наряду с загрузкой процессора и RSS, но, к сожалению, пользовательский интерфейс не может их визуализировать иsysdig
не может фильтроватьprocinfo
события по процессам в время написания. Тем не менее, это должно быть возможно с пользовательским долотом (sysdig
расширение написано на Lua).источник
pgrep --help
на помощь. Там по крайней мере--newest
и--oldest
.Ctrl+C
psrecord в процессе psrecord, который просто завершается без сохранения графика, необходимо завершить тестируемый процесс.Чтобы использовать эту информацию в сценарии, вы можете сделать это:
calcPercCpu.sh
используйте как:
calcPercCpu.sh 1234
где 1234 является пидДля указанного $ nPid он будет измерять среднее значение 10 снимков использования процессора в целом за 1 секунду (задержка 0,1 с каждый * nTimes = 10); это обеспечивает хороший и быстрый точный результат того, что происходит в данный момент.
Настройте переменные в соответствии с вашими потребностями.
источник
$nPercCpu
): shell, top, grep, sed, cut ... bc. Многие, если не все, вы можете, например, объединить в 1 Sed или Awk скрипт.top
выход «s является в среднем более чем$delay
. Ср Как рассчитатьЯ обычно использую следующие два:
Штангенциркуль HP : это очень хороший инструмент для мониторинга процессов, вы также можете проверить график звонков и другую информацию низкого уровня. Но обратите внимание, это бесплатно только для личного использования.
daemontools : коллекция инструментов для управления сервисами UNIX
источник
Используя
top
иawk
можно легко создать, например, разделенный запятыми журнал использования% CPU ($9
) +% MEM ($10
), который впоследствии можно будет вводить в любой инструмент статистики и построения графиков.Выход будет как
Это не даст хороших результатов для больших
$delay
, хотя, потому что напечатанная временная метка фактически$delay
отстает из-за того, какtop
работает вывод. Не вдаваясь в подробности, 1 простой способ обойти это - записать время, предоставленноеtop
:Тогда отметка времени будет точной, но вывод все равно будет задерживаться
$delay
.источник
Если вы знаете имя процесса, вы можете использовать
источник
Если у вас есть урезанный дистрибутив Linux, в котором у top нет опций для каждого процесса (-p) или связанных опций, вы можете проанализировать вывод команды top для имени вашего процесса, чтобы получить информацию об использовании процессора для каждого процесса.
8 представляет использование ЦП для процесса в выводе команды top в моем дистрибутиве встроенного Linux
источник
Не достаточно репутации, чтобы комментировать, но для psrecord вы также можете вызвать ее напрямую, программным способом, прямо в Python:
источник
Если вам нужны средние значения за период времени определенного процесса, попробуйте накопительную опцию -c top:
"-c a" находится в топе для Mac 10.8.5.
Для Scientific Linux опция -S может быть установлена в интерактивном режиме.
источник
top
действительно предоставляют эту функцию. Моей версии на Fedora 19 нет. То же самое и в Ubuntu 13.04.Я немного опоздал здесь, но я поделюсь своим трюком командной строки, используя только по умолчанию
ps
Я использую это как однострочник. Здесь первая строка запускает команду и сохраняет PID в переменной. Затем ps напечатает истекшее время, PID, процент использования ЦП, процент памяти и память RSS. Вы можете добавить и другие поля.
Как только процесс завершится,
ps
команда не вернет «успех» иwhile
цикл завершится.Вы можете игнорировать первую строку, если PID, который вы хотите профилировать, уже запущен. Просто поместите нужный идентификатор в переменную.
Вы получите такой вывод:
источник