CPU-Auslastung im Shell-Skript abrufen?

7

Ich führe einige JMeter -Tests mit einem Java-Prozess durch, um festzustellen, wie schnell eine Webanwendung unter Last reagiert (500+ Benutzer). JMeter gibt die Reaktionszeit für jede Webanforderung an und ich habe ein Skript geschrieben, das den Tomcat Manager alle X Sekunden anpingt, wodurch ich die aktuelle Größe des JVM-Heaps bekomme.

Ich möchte auf dem Server Statistiken über den Prozentsatz der von Tomcat verwendeten CPU sammeln. Ich habe versucht, es in einem Shell-Skript mit ps wie folgt zu tun:

%Vor%

... Ausführen des Befehls alle X Sekunden und Anhängen der Ergebnisse an eine Textdatei. (Für alle, die sich fragen, pmem =% mem usage und nlwp ist die Anzahl der Threads)

Ich habe jedoch festgestellt, dass dies eine andere Definition von "% der CPU-Auslastung" ergibt, als ich möchte - entsprechend den Manpages für ps ist pcpu definiert als:

  

CPU-Auslastung des Prozesses im Format "##. #". Es ist die verwendete CPU-Zeit geteilt durch die Zeit, die der Prozess abgelaufen ist (cputime / realtime ratio), ausgedrückt in Prozent.

Mit anderen Worten, pcpu gibt mir die% CPU-Auslastung für den Prozess für die Lebensdauer des Prozesses.

Da ich alle x Sekunden ein Beispiel nehmen möchte, möchte ich nur die CPU-Auslastung des Prozesses zur aktuellen Zeit sammeln - ähnlich wie es top mir geben würde (CPU-Auslastung des Prozesses seit dem letzten Update)

Wie kann ich das in einem Shell-Skript erfassen?

    
matt b 08.09.2008, 18:05
quelle

5 Antworten

13

Verwenden Sie top -b (und andere Schalter, wenn Sie unterschiedliche Ausgaben wünschen). Es wird einfach in stdout gespeichert, anstatt in ein Fluchfenster zu springen.

    
Ben Collins 08.09.2008, 18:21
quelle
5

Das nützlichste Tool, das ich für die Überwachung eines Servers während der Durchführung eines Tests wie JMeter gefunden habe, ist dstat . Es gibt Ihnen nicht nur eine Reihe von Statistiken vom Server, es gibt sie für den einfachen Import in eine Tabellenkalkulation an csv aus und Sie können das Tool um Module erweitern, die in Python geschrieben sind.

    
Tim 08.09.2008 21:08
quelle
4

Benutzer laden: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print }' |sed 's/.[^.]*$//' Systemlast: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print }' |sed 's/.[^.]*$//' Leerlauflast: top -b -n 1 |grep Cpu |tail -n 1 |awk '{print }' |sed 's/.[^.]*$//'

Jedes Ergebnis ist eine runde Dezimalzahl.

    
Bilzard 14.03.2013 21:44
quelle
2

Von meinem Kopf aus würde ich die / proc-Dateisystemansicht des Systemstatus verwenden - Schauen Sie sich man 5 proc an, um das Format des Eintrags für / proc / PID / stat zu sehen , die Informationen zur gesamten CPU-Auslastung enthält und / proc / stat zum Abrufen globaler Systeminformationen verwendet. Um "aktuelle Zeit" zu erhalten, meinen Sie wahrscheinlich "CPU in den letzten N Sekunden"; nehmen Sie zwei Abtastungen kurz hintereinander, um die aktuelle Rate des CPU-Verbrauchs zu sehen. Sie können diese Werte dann in etwas Nützliches umwandeln. Wirklich, das ist wahrscheinlich eher ein Perl / Ruby / Python-Job als ein reines Shell-Skript.

Sie können möglicherweise mit / proc / PID / status nach den ungefähren Daten suchen, die Sie benötigen, um einen Sleep-Durchschnitt für den Prozess zu erhalten. Ziemlich grobe Daten obwohl.

    
Adam Wright 08.09.2008 18:28
quelle
0

verwenden Sie auch 1 als Iterationszähler, so dass Sie den aktuellen Snapshot erhalten, ohne darauf warten zu müssen, dass Sie einen weiteren in $ delay time erhalten.

%Vor%     
mighq 25.01.2013 11:08
quelle

Tags und Links