Comment surveiller la mémoire de pointe consommée par un processus de Linux? Ce n'est pas un programme que je peux modifier à l'intérieur de mesurer l'utilisation de la mémoire de pointe. P>
Je ne veux pas vraiment de mesures détaillées, je ne veux pas non plus qu'ils ralentissent mon programme excessivement .. Donc Valgrind ou quoi que ce soit de poids lourd n'est pas ce que je cherche ... Et comme d'autres messages précédents [ Utilisation de la mémoire maximale d'un processus Linux / Unix , Time -V ne semble pas signaler la mémoire de ma machine ... p>
Je peux simplement exécuter haut ou ps et extraire les cordes consommées de la mémoire pour Mon identifiant de processus à l'aide d'un script simple. Cependant, mon processus fonctionne pendant environ 20-30 minutes, donc je souhaite pouvoir me connecter et obtenir le maximum. Je peux tolérer des échantillons à grains grossières ... toutes les 1 minute ou plus ... Spécifiquement comment i-> 1. Fourche ce script simple Mem-Mease dans ZSH? 2. Tuez-le lorsque le test-sous-test se termine? P>
10 Réponses :
En fait, ce que j'ai dit avant:
"" "" p>
Essayez p> qui devrait l'aider. Si vous n'utilisez que "temps". , bash exécutera l'intégré (qui n'a pas "-v") p> "" " p> ne fonctionne pas (retourne 0). P> J'ai fait le script Perl suivant (que j'ai appelé smaps): p> puis je l'appelle (par exemple, pour regarder l'utilisation de la mémoire de QGIT): P> bash -c './smaps $$ & exec qgit'
Sortie en 2 pièces ... toujours pas utile :( Temps d'utilisateur (secondes): 16.50 Temps système (secondes): 0,47% de la CPU Ce travail a été: 100% écoulé (Horloge murale) Temps (H: MM: SS ou M: SS): 0: 16.96 Taille de texte partagée moyenne (KBYTES): 0
Taille de données non partagée moyenne (KBYTES): 0 Taille moyenne de la pile (KBYtes): 0 Taille totale moyenne moyenne (KBYTES): 0 Maximum de résident Taille (KBYTES): 0 MOYEN MOYEN DE RESIDENT Taille (KBYTES): 0 Major (nécessitant des E / S) Défauts de page de page: 0 Défauts de page de la page (Récupération de cadre): 255315 Commutateurs de contexte volontaire: 1211 Interrupteurs de contexte involontaire: 1232 Swaps: 0 Entrées du système de fichiers: 0 Sens du système de fichiers: 68472 Messages de socket envoyé: 0 Taille de la page reçue: 0 Taille de la page ( octets): 4096
Vous pouvez utiliser un plugin Munin-noeud pour le faire, mais c'est un peu de poids lourd. http://munin.projects.linpro.no/ p>
Il suffit d'utiliser Top -N pour itérer un nombre de fois spécifié, et -D pour retarder les mises à jour. Vous pouvez également saisir uniquement la sortie correspondant à votre processus en grepping son PID, comme: lire la page manuelle supérieure pour plus d'informations p> man top
/ proc / pid / smaps, comme / proc / pid / maps, ne donne que des informations sur les mappages de mémoire virtuelle, pas l'utilisation de la mémoire physique réelle. Top and PS donne le RSS, qui (selon ce que vous voulez savoir) peut ne pas être un bon indicateur de l'utilisation de la mémoire. P>
Un bon pari, si vous exécutez sur un noyau Linux plus tard que 2.6.28.7, vous devez utiliser la fonction de pageMAP. Il y a une discussion sur cette science et source pour certains outils chez www.eqware.net/articles/capturingprocessMemoryUsageUnLUX . p>
L'outil de collecte de page est destiné à capturer l'utilisation de la mémoire de tous les processus, et impose probablement un plus grand fardeau de la CPU que vous le souhaitez. Vous devriez facilement pouvoir le modifier, cependant, de sorte qu'il capture des données pour seulement un identifiant de processus spécifique. Cela réduirait suffisamment les frais généraux afin que vous puissiez facilement le courir toutes les quelques secondes. Je n'ai pas essayé, mais je pense que l'outil d'analyse de page doit fonctionner sans changement. P>
eqvan p>
Cela dépend de quel type de mémoire que vous souhaitez surveiller.
Surveillance de la macette suivante en triant le numéro de tout le processus (tout total du thread) vous permettra de surveiller la mémoire physique malloc chaque processus utilise. P>
Vous pouvez écrire un programme AC pour la rendre encore plus rapide, mais je pensais que Awk était le choix minimum à cet effet. P>
Je préférerais obtenir les chiffres comme suit pour obtenir les chiffres réels au moins frais généraux.
Vous devez les résumer afin de diviser ce que PS montre comme RSS et obtenez des numéros plus précis de ne pas confondre. p>
MAPD: P>
awk '/^[0-9a-f]/{if ($6=="") {anon=1}else{anon=0}} /Private_Clean/{if(anon) {asum+=$2}else{nasum+=$2}} END{printf "sum=%d\n",asum}' /proc/<pid>/smaps
Plutôt que de voter / procurner un milliard de fois une seconde, pourquoi pas seulement traiter la production de la strace? P>
http://tstarling.com/blog/ 2010/06 / mesure-mémoire-usage-with-strace / p>
Cela ne tient pas compte des fichiers mappés en mémoire, ce qui ne consomme vraiment pas de mémoire comme la mémoire réelle.
Les métriques de mémoire précises peuvent être données par interface de noyau PageMap - utilisée dans la bibliothèque de libpagemap https://fedorahosted.org/libpagemap/ . La bibliothèque fournit également des utilisateurs d'utilisateurs afin que vous puissiez démarrer la mémoire de surveillance immédiatement. P>
Une meilleure alternative pour mesurer l'utilisation de la mémoire RSS pic / hautes eaux em> est la https://github.com/gsauthof/cgmemtime P>
C'est aussi facile à utiliser comme CGMEMTime code> strong> outil disponible ici: p>
Si vous n'avez besoin que de surveiller un seul processus, vous pouvez faire quelque chose comme ceci:
#!/bin/bash PID=$(pidof myprog) while true; do printf "%s: %s KB\n" "$(date --iso=sec)" "$(grep VmHWM: /proc/$PID/status | awk '{print $2}')"; sleep 5s; done