Dies sollte mit dem Standardbefehl möglich sein ps
. Von man ps
:
%mem %MEM ratio of the process's resident set size to the physical
memory on the machine, expressed as a percentage.
rss RSS resident set size, the non-swapped physical memory that
a task has used (inkiloBytes).
vsz VSZ virtual memory size of the process in KiB (1024byte units).
Device mappings are currently excluded; this is subject
to change.
Das einzige weitere Detail, das Sie benötigen, ist die PID Ihres Prozesses. Wenn Ihre App also myApp heißt, können Sie die PID folgendermaßen ermitteln:
ps x | grep myApp
Welches druckt eine Liste wie folgt:
15909 pts/3 S 0:37 myApp
22583 pts/6 S+ 0:00 grep --color myApp
Die erste Spalte ist die Prozess-ID (PID). Wenn Sie dies nun automatisieren möchten, müssen Sie die Zeile mit dem Befehl grep überspringen und die Ausgabe in einer BASH-Variablen speichern:
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}')
Der awk
Teil veranlasst den Befehl, nur das 1. Feld, die PID, zu drucken.
Sie können all dies in einer Zeile zusammenfassen, die den Speicherbedarf Ihrer App jede Minute in einer Datei mit dem Namen speichert memlog.txt
:
while sleep 60; do \
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt ; \
done
while sleep 60
Bewirkt, dass die Bash in einer Endlosschleife ausgeführt wird und 60 Sekunden zwischen den Schleifen wartet
sleep 60
sagt ihm, er solle 60 Sekunden warten. Ändern Sie diesen Wert, wenn Sie ihn häufiger aktualisieren müssen.
Die resultierende Ausgabe ist eine Datei ( memlog.txt
) mit 4 Spalten: die PID Ihrer App, die residente eingestellte Größe, die virtuelle Speichergröße und der Speicherprozentsatz. Zum Beispiel:
4166 25240 633028 0.3
4166 25240 633028 0.3
4166 25240 633028 0.3
Dies kann leicht erweitert werden, um die CPU-Auslastung und eine Zeit für jede Messung einzuschließen. Um beispielsweise die Zeit einzuschließen:
while sleep 60; do \
date=$(date +%D" "%H:%M:%S);
echo -n "$date : " >> memlog.txt;
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; \
done