Есть ли инструмент, который позволяет регистрировать использование памяти?

18

Я хочу отслеживать использование памяти процессом, и я хочу, чтобы эти данные были зарегистрированы. Существует ли такой инструмент?

tshepang
источник

Ответы:

8

Я написал сценарий, чтобы сделать именно это . Это в основном образцы psс определенными интервалами, чтобы создать профиль конкретного процесса. Процесс может быть запущен самим средством мониторинга, или это может быть независимый процесс (заданный шаблоном pid или командой).

Джит
источник
1
Сиропи, по-видимому, переехал на github.com/jeetsukumaran/Syrupy
Framester
12

Иногда, когда возникает необходимость, я просто делаю:

$ top -d 1 -b |grep <process> >>somefile

Это не элегантное решение, но оно выполнит свою работу, если вы хотите, чтобы быстрая грубая стоимость подтвердила вашу гипотезу.

Шридхар Айер
источник
Я думаю, что это элегантно в своей простоте. Возможно, вы захотите сделать так, grep --line-buffered <process> >>somefileчтобы grep
выводил
7

sar( System Activity Reporter ) из пакета sysstat - ваш друг в этом случае.

Другим способом будет мониторинг в сочетании с историческими данными, например, Munin, pnp4nagios, rrdtools, ...

Кристиан
источник
1
но можно sarсосредоточиться только на одном процессе? В основном это похоже на мониторинг системы в целом
ксенотеррацид
3
Команда pidstatтакже из пакета sysstat предоставляет довольно приятный интерфейс для составления статистики по одному процессу.
Стивен Д.
@xenoterracide Стивен D получил ответ. Я не знал об этой команде раньше.
Кристиан
4

Помимо вышеупомянутого Сар, я бы рекомендовал поверх . Он сохраняет двоичный журнал, который вы можете просмотреть впоследствии, и, кроме того, память сохраняет много другой информации.

rsuarez
источник
3

Вы можете попробовать Вальгринд .

Valgrind - это инструментальная среда для создания инструментов динамического анализа. Существуют инструменты Valgrind, которые могут автоматически обнаруживать многие ошибки управления памятью и потоков, а также подробно описывать ваши программы. Вы также можете использовать Valgrind для создания новых инструментов.

В настоящее время дистрибутив Valgrind включает в себя шесть инструментов качества производства: детектор ошибок памяти , два детектора ошибок потока, профилировщик кеша и прогнозирования ветвлений, профилировщик кеша, генерирующий граф вызовов, и профилировщик прогнозирования ветвлений и профилировщик кучи .

andcoz
источник
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
saji89
Этот массив документов поясняю подробно.
Шон Се
0

Мне нравится простой ответ Шридхара, но я попробовал свой собственный, прежде чем попробовал его:

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}]
Роберт Флеминг
источник