Frage

Ich lasse einige laufen JMeter Tests anhand eines Java-Prozesses, um festzustellen, wie reaktionsschnell eine Webanwendung unter Last ist (über 500 Benutzer).JMeter gibt die Antwortzeit für jede Webanfrage an, und ich habe ein Skript geschrieben, das alle X Sekunden einen Ping an den Tomcat Manager sendet, wodurch ich die aktuelle Größe des JVM-Heaps erhalte.

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

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`

...den Befehl alle X Sekunden ausführen und die Ergebnisse an eine Textdatei anhängen.(für alle, die sich fragen, pmem = % Speichernutzung und nlwp ist die Anzahl der Threads)

Allerdings habe ich festgestellt, dass dies eine andere Definition von „% der CPU-Auslastung“ ergibt, als ich gerne hätte – laut den Manpages für ps, pcpu ist definiert als:

CPU-Auslastung des Prozesses im Format „##.#“.Dabei handelt es sich um die genutzte CPU-Zeit geteilt durch die Zeit, die der Prozess ausgeführt hat (CPU-/Echtzeit-Verhältnis), ausgedrückt als Prozentsatz.

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

Da ich alle X Sekunden eine Probe nehmen möchte, möchte ich nur die CPU-Auslastung des Prozesses zum aktuellen Zeitpunkt erfassen – ähnlich wie bei „was“. top würde mir geben (CPU -Nutzung des Prozesses seit dem letzten Update).

Wie kann ich dies aus einem Shell-Skript heraus erfassen?

War es hilfreich?

Lösung

Verwenden top -b (und andere Schalter, wenn Sie andere Ausgänge wünschen).Es wird einfach auf stdout ausgegeben, anstatt in ein Fluchfenster zu springen.

Andere Tipps

Das nützlichste Tool, das ich zum Überwachen eines Servers beim Durchführen eines Tests wie JMeter gefunden habe, ist dstat.Es liefert Ihnen nicht nur eine Reihe von Statistiken vom Server, sondern gibt diese auch im CSV-Format aus, um sie einfach in eine Tabellenkalkulation zu importieren, und ermöglicht Ihnen die Erweiterung des Tools mit in Python geschriebenen Modulen.

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

Jedes Ergebnis ist eine runde Dezimalzahl.

Spontan würde ich die /proc-Dateisystemansicht des Systemstatus verwenden – Schauen Sie sich an Mann 5 Proz um das Format des Eintrags für /proc/PID/stat anzuzeigen, der Informationen zur gesamten CPU-Auslastung enthält, und verwenden Sie /proc/stat, um globale Systeminformationen abzurufen.Um die Nutzung zur „aktuellen Zeit“ zu erhalten, meinen Sie wahrscheinlich wirklich „CPU, die in den letzten N Sekunden verwendet wurde“;Nehmen Sie zwei Proben mit geringem Abstand, um die aktuelle CPU-Verbrauchsrate zu ermitteln.Sie können diese Werte dann in etwas Nützliches umwandeln.Tatsächlich handelt es sich hierbei jedoch wahrscheinlich eher um einen Perl/Ruby/Python-Job als um ein reines Shell-Skript.

Möglicherweise können Sie mit /proc/PID/status die groben Daten abrufen, die Sie benötigen, was einen Schlafdurchschnitt für den Prozess ergibt.Allerdings ziemlich grobe Daten.

Verwenden Sie auch 1 als Iterationsanzahl, damit Sie den aktuellen Schnappschuss erhalten, ohne in der Verzögerungszeit auf einen weiteren warten zu müssen.

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