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