time
ist ein brillanter Befehl, wenn Sie herausfinden möchten, wie viel CPU-Zeit ein bestimmter Befehl benötigt.
Ich suche nach etwas ähnlichem, das die maximale RAM-Auslastung des Programms und aller möglicher Kinder messen kann. Vorzugsweise sollte zwischen belegtem und nicht belegtem Speicher unterschieden werden. Vielleicht könnte es sogar die mittlere Speichernutzung geben (also die Speichernutzung, die Sie erwarten sollten, wenn Sie für eine lange Zeit ausgeführt werden).
Also würde ich gerne machen:
rammeassure my_program my_args
und erhalte eine Ausgabe ähnlich der folgenden:
Max memory allocated: 10233303 Bytes
Max memory used: 7233303 Bytes
Median memory allocation: 5233303 Bytes
Ich habe mir memusg
https://gist.github.com/526585/590293d6527c91e48fcb08edb8de9fd6c88a6d82 angesehen, aber ich betrachte das als etwas Hack.
./tstime -t bash -c 'perl -e "\$a=\"x\"x100000000;\$b=\$a.\$a;\$b=\"\";\$a=\"\";sleep 10;"'
glibc
(und andere sortierte Bibliotheken, sie werden für etwas "geteilt" genannt). Viele Daemons laden die Konfiguration in den Arbeitsspeicher und forken (2) untergeordnete Elemente, die dann die Konfigurationsdaten gemeinsam nutzen. Dann gibt es Daten in Readahead / Writebehind-Puffern, die vom Kernel verwaltet werden. Und dann gibt es Services, die eine Herde lose gekoppelter Prozesse sind (denken Sie an Ihre Desktop-Umgebung und all ihre Applets und Hintergrundinformationen).time
ist ein in deine Shell eingebautes. Wenn Sie möchten,time
aber weitere Informationen benötigen, probieren Sie GNUtime
im verbose (-v
) -Modus aus:Suchen Sie das Paket "time" oder "gnutime" in Ihrem Paketmanager.
quelle
wait3
füllt eine Struktur aus, die beschrieben wird ingetrusage(2)
: 'Nicht alle Felder sind unter Linux aussagekräftig. [..] '.tstime
meldet 10652 KiB. Wieder unter Ubuntu 10.04./usr/bin/time -v perl -e '$a="x"x100000000;$b=$a.$a;sleep 10;'
. top sagt, es dauert ungefähr 570 MB, aber die Zeit sagt 2,3 GB. In der Praxis ist diese Nummer für mich nicht verwendbar.Vielleicht übertrieben, aber ich habe gerade herausgefunden, dass
valgrind
es ein nettes Tool namens gibtmassif
. Ich habe es getestet aufxterm
:Und Sie erhalten ein schönes Speicherauslastungsdiagramm:
zusammen mit übermäßig detaillierten Informationen zur Speichernutzung. Details im valgrind Handbuch .
Die Programme werden jedoch ca. 20x langsamer ausgeführt. Außerdem habe ich einige Befehle in der ausgeführt
xterm
. Ihr Speicherbedarf wurde berücksichtigt, da--trace-children=yes
die Option vorhanden ist!quelle
Obwohl das Thema ziemlich alt ist, möchte ich ein anderes Projekt teilen, das aus der Linux-Kernelfunktion von cgroups hervorgegangen ist.
https://github.com/gsauthof/cgmemtime :
quelle
Sieht so aus, als würde tstime unter Nicht-Root-Betriebssystemen unter Linux> = 3.0 nicht mehr funktionieren. Hier ist ein Polling-Dienstprogramm, das ich geschrieben habe, um das Problem zu umgehen: https://github.com/jhclark/memusg/blob/master/memusg
quelle
/usr/bin/time -v
gibt die korrekte Ausgabe in neueren Versionen. In älteren Versionen müssen Sie nur durch 4 teilen, um die richtige Menge zu erhalten.