Je souhaite surveiller l'utilisation de la mémoire d'un processus et je souhaite que ces données soient enregistrées. Un tel outil existe-t-il?
Je souhaite surveiller l'utilisation de la mémoire d'un processus et je souhaite que ces données soient enregistrées. Un tel outil existe-t-il?
Réponses:
J'ai écrit un script pour faire exactement cela . Il échantillonne essentiellement ps
à des intervalles spécifiques, pour créer un profil d'un processus particulier. Le processus peut être lancé par l'outil de surveillance lui-même, ou il peut s'agir d'un processus indépendant (spécifié par pid ou modèle de commande).
Parfois, lorsque le besoin s'en fait sentir, je fais juste:
$ top -d 1 -b |grep <process> >>somefile
Ce n'est pas une solution élégante, mais fait le travail si vous voulez que la valeur brute rapide vérifie votre hypothèse.
grep --line-buffered <process> >>somefile
pour forcer grep à sortir chaque ligne sans mettre en mémoire tampon
sar
( System Activity Reporter ) du package sysstat est votre ami dans ce cas.
Une autre façon serait le suivi combiné avec des données historiques, par exemple Munin, pnp4nagios, rrdtools, ...
sar
se concentrer sur un seul processus? il semble surtout surveiller le système dans son ensemble
pidstat
commande également du paquet sysstat fournit une interface assez agréable pour rapporter des statistiques sur un seul processus.
Vous pouvez essayer Valgrind .
Valgrind est un cadre d'instrumentation pour la construction d'outils d'analyse dynamique. Il existe des outils Valgrind qui peuvent détecter automatiquement de nombreux bogues de gestion de la mémoire et de thread, et profiler vos programmes en détail. Vous pouvez également utiliser Valgrind pour créer de nouveaux outils.
La distribution Valgrind comprend actuellement six outils de qualité de production: un détecteur d'erreur de mémoire , deux détecteurs d'erreur de thread, un profileur de prédiction de cache et de branche, un cache de génération de graphique d'appels et un profileur de prédiction de branche et un profileur de tas .
J'aime la réponse simple de Sridhar mais j'ai roulé la mienne avant d'essayer la sienne:
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)
Il n'est fondamentalement utile que si vous souhaitez une sortie structurée. Modifiez 7274 selon le cas. Python 3.5 a également échoué _asdict()
, alors utilisez Python 2.
Le fichier de sortie ressemble à:
["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}]