Existe-t-il un outil qui permet d'enregistrer l'utilisation de la mémoire?

18

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?

tshepang
la source

Réponses:

8

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).

Jeet
la source
1
Syrupy a apparemment déménagé sur github.com/jeetsukumaran/Syrupy
Framester
12

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.

Sridhar Iyer
la source
Je pense que c'est élégant dans la simplicité est tout. Vous voudrez peut-être faire grep --line-buffered <process> >>somefilepour forcer grep à sortir chaque ligne sans mettre en mémoire tampon
Ott Toomet
7

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, ...

Christian
la source
1
mais peut-il sarse concentrer sur un seul processus? il semble surtout surveiller le système dans son ensemble
xenoterracide
3
La pidstatcommande également du paquet sysstat fournit une interface assez agréable pour rapporter des statistiques sur un seul processus.
Steven D
@xenoterracide Steven D avait la réponse. Je n'étais pas au courant de cette commande auparavant.
Christian
4

Outre le sar susmentionné, je recommanderais au sommet . Il enregistre un journal binaire que vous pouvez parcourir par la suite, et en plus de la mémoire enregistre beaucoup d'autres informations.

rsuarez
la source
3

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 .

andcoz
la source
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
saji89
Ce document massif explique en détail.
Shawn Xie
0

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}]
Robert Fleming
la source