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 andere Detail, das Sie benötigen, ist die PID Ihres Prozesses. Wenn Ihre App myApp heißt, können Sie die PID folgendermaßen erhalten:
ps x | grep myApp
Welche 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 '')
Das awk
Teil lässt den Befehl nur das 1. Feld, die PID, drucken.
Sie können all dies in einem One-Liner zusammenfassen, der den Speicherplatz Ihrer App jede Minute in einer Datei speichert, die als memlog.txt
:
while sleep 60; do \ pid=$(ps x | grep myApp | grep -v grep | awk '') && \ ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt ; \ done
while sleep 60
Bewirkt, dass bash in einer Endlosschleife ausgeführt wird und 60 Sekunden zwischen den Schleifen wartetsleep 60
sagt, es soll 60 Sekunden warten. Ändern Sie diesen Wert, wenn Sie ihn häufiger aktualisieren möchten.
Die resultierende Ausgabe ist eine Datei ( memlog.txt
) mit 4 Spalten: Die PID Ihrer App, die Größe des residenten Satzes, die Größe des virtuellen Speichers und der Speicherprozentsatz. Zum Beispiel:
4166 25240 633028 0.3 4166 25240 633028 0.3 4166 25240 633028 0.3
Dies kann leicht um die CPU-Nutzung und eine Zeit für jede Messung erweitert werden. Zum Beispiel, um 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 '') && \ ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; \ done