Ich führe einige JMeter-Tests gegen einen Java-Prozess durch, um zu bestimmen, wie reaktionsschnell eine Webanwendung unter Last (500+ Benutzer) ist. JMeter wird die Antwortzeit für jede Webanfrage anzeigen, und ich habe ein Skript geschrieben, um alle X Sekunden den Tomcat Manager anzupingen, um die aktuelle Größe des JVM-Heap zu erhalten.
Ich möchte Statistiken zum Server darüber sammeln, wie viel % der CPU von Tomcat verwendet wird. Ich habe versucht, dies in einem Shell-Skript mit ps
wie folgt zu tun:
PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`
...das Kommando alle X Sekunden ausführen und die Ergebnisse an eine Textdatei anhängen. (für alle Neugierigen, pmem
= % Speicherauslastung und nlwp
ist die Anzahl der Threads)
Ich habe jedoch festgestellt, dass dies eine andere Definition von "% der CPU-Auslastung" liefert, als ich möchte - gemäß den Manpages für ps wird pcpu
wie folgt definiert:
CPU-Auslastung des Prozesses im Format "##.#". Es ist die verwendete CPU-Zeit geteilt durch die Zeit, die der Prozess ausgeführt wurde (cputime/realtime-Verhältnis), ausgedrückt als Prozent.
Mit anderen Worten, pcpu
gibt mir die % CPU-Auslastung des Prozesses für die gesamte Lebensdauer des Prozesses.
Da ich alle X Sekunden eine Stichprobe nehmen möchte, möchte ich die CPU-Auslastung des Prozesses nur zum aktuellen Zeitpunkt erfassen - ähnlich wie das, was top
mir geben würde (CPU-Auslastung des Prozesses seit dem letzten Update).
Wie kann ich dies in einem Shell-Skript erfassen?