Utilisation maximale de la mémoire d'un linux/unix processus
Est-il un outil qui va exécuter une ligne de commande et le rapport de la crête de l'utilisation de la RAM totale?
J'imagine quelque chose d'analogue à /usr/bin/time
Vous devez vous connecter pour publier un commentaire.
Voici un one-liner qui ne nécessite pas de scripts externes ou de services publics, et ne vous obligent pas à démarrer le processus via un autre programme comme Valgrind ou le temps, de sorte que vous pouvez l'utiliser pour n'importe quel processus qui est déjà en cours d'exécution:
(remplacer
$PID
avec le PID du processus qui vous intéresse)[Modifier: Fonctionne sur Ubuntu 14.04:
/usr/bin/time -v command
assurez-vous d'utiliser le chemin d'accès complet.]Ressemble
/usr/bin/time
ne vous donner cette info, si vous passez-v
(c'est sur Ubuntu 8.10). Voir, par exemple,Maximum resident set size
ci-dessous:/bin/time -v
elle n'en résout.time -v
sur OS X?time -l
sur MacOS, donne le même résultat.time
TR / min pour obtenir /usr/bin/heure sur Redhat, à base de linuxes.time
1.7-24 sur Ubuntu depuis le 23 Février '15 incorpore un correctif à la mémoire de reporting.$ \time -v ls /
Fonctionne également.rpm -q time
. Source; recherche #702826 dans la page.(Ce qui est déjà une réponse, la vieille question.. mais juste pour le record 🙂
J'ai été inspiré par le Yang du script, et est venu avec ce petit outil, nommé memusg. J'ai simplement augmenté la fréquence d'échantillonnage de 0,1 à gérer beaucoup de court processus vivants. Au lieu de suivre un processus unique, j'ai fait de la mesure de flux rss somme des processus de groupe. (Oui, j'écris beaucoup de programmes qui travaillent ensemble), Il travaille actuellement sur Mac OS X et Linux. L'utilisation devait être similaire à celle de
time
:Il ne montre que le pic pour le moment, mais je suis intéressé par de légères extensions pour l'enregistrement des autres (approximative) des statistiques.
Il est bon d'avoir un tel outil simple pour simplement prendre un coup d'oeil avant de commencer sérieusement le profilage.
ps -o rss=
où rss est la mémoire réelle (résidente) taille du processus (en 1024 unités d'octets) de mon BSD page de man.time -v
utilise. mais je ne suis pas sûr à 100%. c'est comme dans la programmation lorsque vous utilisez un while(){ check(); wait();} si quelque chose se produit au cours de wait(), trop mauvais, vous l'avez perdu. l'autre façon est d'associer des événements et puis, vous obtenez un message à chaque fois que quelque chose se passe, de cette façon, vous ne perdez aucune information.Valgrind one-liner:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
Remarque l'utilisation de-pages-que-tas de mesurer toute la mémoire d'un processus. Plus d'infos ici: http://valgrind.org/docs/manual/ms-manual.html
time
, Je vous quitte.--pages-as-heap
option dans valgrind-3.5.0 sur un centos 5.5 distribution. Aussi--trace-children
pourrait être utile à valgrind. Je ne suis pas sûr de ce qu'il fait, mais je suppose que c'traces des processus enfants aussi.valgrind --massif
. Vous pouvez également utiliser lems_print
outil qui vient avec elle pour la pratique de sortie (y compris ascii graphiques d'utilisation dans le temps)time
si, au moins 10 fois plus de temps sur une commande commels
.Peut-être (gnu) temps(1) déjà fait ce que vous voulez. Par exemple:
Mais d'autres outils de profilage peuvent donner des résultats plus précis en fonction de ce que vous cherchez.
csh
. Si vous utilisez le chemin d'accès exact, il vous permettra d'exécuter la commande externe. Autant que je sache, seule la version GNU prend en charge l'option de format./usr/bin/heure peut-être est-ce que vous voulez, en fait. Quelque chose comme.
Voir le temps(1) pour plus de détails...
Sur Linux:
Utilisation
/usr/bin/time -v <program> <args>
et recherchez "Maximum resident set size".(À ne pas confondre avec le Bash
time
intégré dans la commande! Il faut donc utiliser la chemin d'accès complet,/usr/bin/time
)Par exemple:
Sur BSD, MacOS:
Utilisation
/usr/bin/time -l <program> <args>
, recherche pour "maximum resident set size":sudo apt-get install time
Si le processus s'exécute pour au moins un couple de secondes, puis vous pouvez utiliser le script bash suivant, qui va exécuter la ligne de commande, puis les imprimer sur la sortie stderr le pic de flux RSS (substitut pour
rss
tout autre attribut qui vous intéresse). C'est un peu léger, et ça marche pour moi avec leps
inclus dans Ubuntu 9.04 (que je ne peux pas dire pourtime
).Sur MacOS Sierra utilisation:
Vous pouvez utiliser
grep
prendre ce que vous voulez peut-être.command time -l
au lieu de/usr/bin/time -l
qui sera la cause de votre shell pour en réalité appeler un binaire appelétime
au lieu de la fonction builtin. (Oui,command
n'est pas un espace réservé,command time
est différent que de simplementtime
.)\time -l
œuvres.Bien, si vous voulez vraiment montrer la mémoire de crête et quelques statistiques plus détaillées, je vous recommandons d'utiliser un profiler comme valgrind. Une belle valgrind avant la fin de l' alleyoop.
Vous pouvez utiliser un outil comme Valgrind pour ce faire.
Est ici (sur la base des autres réponses) un script très simple qui regarde déjà un processus en cours d'exécution. Vous avez juste à le faire fonctionner avec le pid du processus que vous voulez regarder comme argument:
Exemple d'utilisation:
Usage Massif: http://valgrind.org/docs/manual/ms-manual.html
Heaptrack est KDE outil qui dispose d'une interface utilisateur graphique et de texte de l'interface. Je le trouve plus adapté que valgrind pour comprendre l'utilisation de la mémoire d'un processus, car il fournit plus de détails et flamegraphs. Il est aussi plus rapide car il fait moins de vérifier que valgrind. Et il vous donne l'utilisation maximale de la mémoire.
De toute façon, le suivi de flux rss et vss est trompeuse parce que les pages puissent être partagées, c'est pourquoi que
memusg
. Ce que vous devez vraiment faire est de suivre la somme dePss
dans/proc/[pid]/smaps
ou de l'utilisationpmap
. GNOME system-monitor utilisé pour le faire mais c'était trop cher.Ré-inventer la roue à la main script bash. Rapide et propre.
Mon cas d'utilisation: je voulais surveiller une machine linux qui a moins de RAM et je voulais prendre un instantané de chaque récipient d'utilisation lorsqu'il s'exécute dans une utilisation intensive.
Exemple de sortie:
Sur macOS, vous pouvez utiliser DTrace à la place. Les "Instruments" de l'app est une belle interface, il est livré avec XCode autant que je sache.
'htop" est mieux de commande pour voir quel processus est à l'aide de la quantité de RAM.....
pour plus de détails
http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
Désolé, je suis ici la première fois et ne peut que poser des questions ...
Utilisé suggéré:
valgrind --tool=massif --pages-que-tas=oui --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed-e 's/mem_heap_B=(.*)/\1/' | tri -g | tail-n 1
alors
grep mem_heap_B massif.hors
...
mem_heap_B=1150976
mem_heap_B=1150976
...
c'est très différent de ce "top" commande affiche au même moment :
14673 gu27mox 20 0 3280404 468380 19176 R 100.0 2.9 6:08.84 pwanew_3pic_com
ce sont mesurées en unités de valgrind ??
La
/usr/bin/time-v ./test.sh
n'a jamais répondu - vous devez nourrir directement exécutable /usr/bin/time comme:
/usr/bin/time-v pwanew_3pic_compass_2008florian3_dfunc.statique card_0.100-0.141_31212_resubmit1.dat_1.140_1.180 1.140 1.180 31212