Я хочу отслеживать использование памяти процессом, и я хочу, чтобы эти данные были зарегистрированы. Существует ли такой инструмент?
Я хочу отслеживать использование памяти процессом, и я хочу, чтобы эти данные были зарегистрированы. Существует ли такой инструмент?
Ответы:
Я написал сценарий, чтобы сделать именно это . Это в основном образцы ps
с определенными интервалами, чтобы создать профиль конкретного процесса. Процесс может быть запущен самим средством мониторинга, или это может быть независимый процесс (заданный шаблоном pid или командой).
Иногда, когда возникает необходимость, я просто делаю:
$ top -d 1 -b |grep <process> >>somefile
Это не элегантное решение, но оно выполнит свою работу, если вы хотите, чтобы быстрая грубая стоимость подтвердила вашу гипотезу.
grep --line-buffered <process> >>somefile
чтобы grep
sar
( System Activity Reporter ) из пакета sysstat - ваш друг в этом случае.
Другим способом будет мониторинг в сочетании с историческими данными, например, Munin, pnp4nagios, rrdtools, ...
sar
сосредоточиться только на одном процессе? В основном это похоже на мониторинг системы в целом
pidstat
также из пакета sysstat предоставляет довольно приятный интерфейс для составления статистики по одному процессу.
Вы можете попробовать Вальгринд .
Valgrind - это инструментальная среда для создания инструментов динамического анализа. Существуют инструменты Valgrind, которые могут автоматически обнаруживать многие ошибки управления памятью и потоков, а также подробно описывать ваши программы. Вы также можете использовать Valgrind для создания новых инструментов.
В настоящее время дистрибутив Valgrind включает в себя шесть инструментов качества производства: детектор ошибок памяти , два детектора ошибок потока, профилировщик кеша и прогнозирования ветвлений, профилировщик кеша, генерирующий граф вызовов, и профилировщик прогнозирования ветвлений и профилировщик кучи .
Мне нравится простой ответ Шридхара, но я попробовал свой собственный, прежде чем попробовал его:
import json, psutil, datetime, time
with open('log.txt', 'w') as f:
while True:
json.dump((datetime.datetime.now().isoformat(),
psutil.Process(7274).memory_info()._asdict()), f)
f.write('\n')
f.flush()
time.sleep(1)
В основном это полезно, только если вы хотите структурированный вывод. Измените 7274 в зависимости от ситуации. Также Python 3.5. Что-то сломалось _asdict()
, так что используйте Python 2.
Выходной файл выглядит так:
["2019-03-19T11:21:53.784670", {"rss": 220389376, "vms": 538984448, "shared": 15724544, "text": 303104, "lib": 0, "data": 221364224, "dirty": 0}]
["2019-03-19T11:21:54.786136", {"rss": 220438528, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:55.787555", {"rss": 220495872, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:56.788754", {"rss": 220528640, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]