Schreiben eines CPU / RAM-Nutzungsprotokolls über einen bestimmten Zeitraum, um es unter CentOS abzulegen

8

Ich suche nach einer Anwendung oder Codezeile, mit der ich einen Prozess beobachten, die Informationen in einer Reihe von Variablen speichern und die gesammelten Informationen in eine Datei einfügen kann.

Ich habe es mit Variationen von versucht, topaber kein Glück. Ich verwende mehrere virtuelle CentOS-Server. VM ist ein 2 GB RAM, 2 Prozessor.

Ein Skript, das über einen bestimmten Zeitraum arbeitet, während Zeilen mit den Informationen in eine Textdatei geschrieben werden, damit ich am Ende eine Art Tabelle mit den Daten haben kann, würde funktionieren.

Ich werde den Server einem Stresstest unterziehen und möchte die Daten haben, um Statistiken zu erstellen.

Keponk
quelle

Antworten:

11

Der Standard psist genug.

while true; do ps o pcpu,rsz -p $pid | tail -n1 >>usage.log; sleep $interval; done

Ergebnis:

0.0  3352
0.3 31640
0.4 36924
0.5 36052
...

Das erste Feld ist die CPU-Auslastung in%, das zweite die physische Speicherauslastung in KB.

Whitequark
quelle
das ist perfekt, ich hatte bereits ein langes Skript erstellt, um alle Daten von einer Top-Batch-Ausgabe zu bereinigen, aber das ist viel einfacher, besser und effektiver, ich schätze es sehr, danke!
Keponk
Am Ende habe ich mein Skript weiter verwendet, da ps mir den Lastdurchschnitt gibt, der normalerweise dem CPU% entspricht, aber keine Regel ist. Weitere Informationen hierzu finden Sie in einer schnellen Google-Suche
keponk
1
Die% CPU ist hier nicht die%, die über das Intervall verwendet wird, sondern der durchschnittliche Prozentsatz über die gesamte Laufzeit des Programms. Ich halte das für irreführend.
Will Sewell
2

Wenn Sie sich für ein genaues Timing interessieren und die CPU in Prozent wünschen:

watch --precise -n 1 'top -b -n 1 -p [PID] | tail -n 1 | awk "{print \$9}" >> [PID].log'
Aalex Gabi
quelle
1

Ich würde vorschlagen sadc/ sar.

Bis auf weiteres angehalten.
quelle
Ist es nicht nur systemweit?
Whitequark
@whitequark: Das hängt von der Version von ab sar. Einige Versionen verwenden sar -x PIDandere pidstat -p PID.
Bis auf weiteres angehalten.
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
saji89
0

Sie versuchen zu beobachten, wie viel CPU-Zeit ein bestimmter Prozess benötigt.

Ich wollte ein CPU-Stat-Tool für CentOS vorschlagen . Dies gilt jedoch für das gesamte System, nicht nur für einen Prozess.

Jeder Prozess zeigt die CPU-Zeit in der Ausgabe von ps:

$ ps -ef | egrep blah
root     13988 11152  0 Dec16 ?        00:00:05 sshd: xxx [priv]
xxx      14024 13988  0 Dec16 ?        00:06:00 sshd: xxx@pts/0
xxx      14032 14024  0 Dec16 pts/0    07:00:00 -bash
root      1194   679  0 Apr24 ?        2-05:15:14 [kswapd0]
root      1195   679  0 Apr24 ?        2-06:35:49 [kswapd1]
  • 00:00:00 ist Stunden / Minuten / Sekunden der CPU. Es wird sich ansammeln.
  • Sie benötigen Berechtigungen, um dies zu sehen, wenn der Benutzer nicht Sie ist.
  • Sobald dieser Wert einen Tag überschreitet, ändert sich das Format. darüber sind es 2 Tage. Ihre Parsing-Routine muss damit umgehen.

Analysieren Sie zu diesem Zeitpunkt die Ausgabe mit Python, arbeiten Sie an einer Datumsberechnung, und Sie sind goldrichtig.

Kevin J. Rice
quelle
0

Der folgende Befehl ermittelt alle 40 Sekunden den Durchschnitt der CPU- und Speicherauslastung für einen bestimmten Prozess (pid).

pidstat 40 -ru -p <pid>

Ausgabe für meinen Fall (erste zwei Zeilen für die CPU-Auslastung, zweite zwei Zeilen für den Speicher):

02:15:07 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:15:47 PM     24563    0.65    0.07    0.00    0.73     3  java

02:15:07 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:15:47 PM     24563      6.95      0.00 13047972 2123268   6.52  java
Celik
quelle