Frage

Ich betreibe ein Shell-Skript eine c ++ Anwendung auszuführen, die die Leistung eines api misst. Ich kann die Latenz (Zeit genommen, um einen Wert für einen bestimmten Satz von Parametern zurückzukehren) erfassen des api, aber ich mag auch die CPU- und Speichernutzung neben in Intervallen von sagen 5-10 Sekunden erfassen.

gibt es eine Möglichkeit, dies zu tun, ohne die Leistung des Systems bewirken zu viel und das auch noch im selben Skript? Ich habe viele Beispiele gefunden, wo man kann man außerhalb (unabhängig) des Skripts tun laufen; aber nicht ein, wo wir im selben Skript tun können.

War es hilfreich?

Lösung

Ich würde vorschlagen, ‚ Zeit ‘ Befehl zu verwenden und auch ' vmstat ' Befehl. Die erste wird die CPU-Auslastung von ausführbaren Ausführung geben und die zweite -. Periodische (das heißt einmal pro Sekunde) Abwerfen des CPU / Speicher / IO des Systems

Beispiel:

time dd if=/dev/zero bs=1K of=/dev/null count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 0.738194 seconds, 1.4 GB/s
0.218u 0.519s 0:00.73 98.6%     0+0k 0+0io 0pf+0w <== that's time result

Andere Tipps

Wenn Sie sich für die Erfassung CPU und Mem Nutzung dynamisch gesamte Linux-Box, dann folgenden Befehl können Sie auch helfen:

CPU

vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> CPUDataDump.csv &

vmstat wird für die Sammlung von CPU Zähler verwendet

-n für Verzögerungswert, in diesem Fall ist es 15 ist, dass nach jeder 15 Sekunden bedeutet, werden Statistiken gesammelt werden.

dann 10 die Anzahl der Intervalle ist, würde es 10 Iterationen in diesem Beispiel sein

awk '{now=strftime("%Y-%m-%d %T "); print now $0}' dies die Zeitstempel jeder Iteration Dump

am Ende, die Dump-Datei mit & für die Fortsetzung

Speicher

free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> DataDumpMemoryfile.csv &

free ist für mem Sammlung Statistik

-m dies ist für Einheiten von mem (Sie -b für Bytes, -k für Kilobyte, -g für Gigabyte verwenden)

dann 10 die Anzahl der Intervalle (es würde 10 Iterationen in diesem Beispiel sein)

awk'{now=strftime("%Y-%m-%d %T "); print now $0}' dies die Zeitstempel jeder Iteration Dump

am Ende des Dump & für die Fortsetzung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top