Я хочу контролювати використання пам'яті в процесі, і я хочу, щоб ці дані реєструвалися. Чи існує такий інструмент?
Я хочу контролювати використання пам'яті в процесі, і я хочу, щоб ці дані реєструвалися. Чи існує такий інструмент?
Відповіді:
Я написав сценарій, щоб зробити саме це . Це в основному вибірки 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 для створення нових інструментів.
В даний час розподіл 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}]