Я хочу отслеживать использование памяти процессом, и я хочу, чтобы эти данные были зарегистрированы. Существует ли такой инструмент?
Я хочу отслеживать использование памяти процессом, и я хочу, чтобы эти данные были зарегистрированы. Существует ли такой инструмент?
Ответы:
Я написал сценарий, чтобы сделать именно это . Это в основном образцы 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}]