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?


1
Je pense que ce lien sur la surveillance par programme d'une utilisation de la mémoire de processus vous sera utile pour résoudre votre besoin.
Sen

Réponses:



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.


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


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.


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 .


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}]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.