Ich arbeite auf einem Mac Mini mit OS X 10.8.2. Ich bin ein App-Entwickler, aber in diesem Fall erstelle ich eine App in C ++, sodass ich Xcode für diese Frage nicht verwenden kann. Ich möchte nachverfolgen, wie viel Speicher meine App belegt, möchte ihn jedoch nicht manuell aufzeichnen. Wie mache ich das.
MEHR INFO: Ich möchte es den ganzen Tag aufnehmen. Ich werde die App den ganzen Tag laufen lassen, damit ich Peaks im Speicher vergleichen kann. Ich bin nicht gegen Apps von Drittanbietern, solange diese zuverlässig sind. Vielen Dank.
Antworten:
Dies sollte mit dem Standardbefehl möglich sein
ps
. Vonman ps
: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:
Welches druckt eine Liste wie folgt:
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:
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
Bewirkt, dass die Bash in einer Endlosschleife ausgeführt wird und 60 Sekunden zwischen den Schleifen wartetsleep 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:Dies kann leicht erweitert werden, um die CPU-Auslastung und eine Zeit für jede Messung einzuschließen. Um beispielsweise die Zeit einzuschließen:
quelle
`
dient nur dazu, BASH mitzuteilen, dass der Befehl in der nächsten Zeile fortgesetzt wird, die hier zum leichteren Lesen verwendet wird. Es sollte funktionieren, wenn Sie es einfach kopieren und direkt einfügen. Es funktioniert nicht, wenn Sie es von Hand kopieren. Das Ganze in einer Zeile istwhile(1); do date=$(date +%D" "%H:%M:%S); echo -n "$date : " >> memlog.txt; pid=$(ps x | grep myApp | grep -v grep | gawk '{print $1}') && ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; sleep 60 ; done
. Was das Visuelle betrifft, würde ich einfach die Werte nehmen und sie zeichnen.while(1); do date=$(date +%D" "%H:%M:%S); echo -n "$date : " >> memlog.txt; pid=$(ps x | grep Nightly | grep -v grep | gawk '{print $1}') && ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; sleep 60 ; done
sudo chmod +x
, um es ausführbar zu machen. Dann ./memTesting.sh. Es wird immer noch ein Fehler ausgegeben, der besagt, dass ein unbekannter Befehl verwendet wird.