Wie kann ich historische Nutzungsmetriken pro Prozess anzeigen?

Wie kann ich historische Nutzungsmetriken pro Prozess anzeigen?

Meine erste Vermutung wäre, dass etwas in SAR oder das Sysstat-Paket im Allgemeinen integriert ist. Wenn das jedoch tatsächlich der Fall ist, kann ich diese Lösung nicht finden.

Was ich gerne sehen würde, und zwar am liebsten über sysstat, ist ein historisches Protokoll der Prozessnutzung (Speicher, CPU usw.) in einem ähnlichen Format wie SAR-Protokolle (sofern nicht bereits irgendwie direkt über SAR-Dateien verfügbar). Ich weiß, dass Überwachungssoftware verfügbar ist, aber ich suche eher nach einem weitgehend nicht-intrusiven Paket und eigentlich nach etwas, das relativ intuitiv über statsd/collectd analysiert werden könnte.

Antwort1

Führen Sie den Befehl sar als Hintergrundprozess aus. Die Syntax hierfür lautet:

sar -o datafile interval count >/dev/null 2>&1 &

Alle Daten werden in binärer Form erfasst und in einer Datei (Datendatei) gespeichert. Die Daten können dann mit dem Befehl sar unter Verwendung der Option -f selektiv angezeigt werden. Legen Sie die Parameter „Intervall“ und „Zählung“ fest, um in Intervallen von einer Sekunde Zähldatensätze auszuwählen. Wenn der Parameter „Zählung“ nicht festgelegt ist, werden alle in der Datei gespeicherten Datensätze ausgewählt. Das Sammeln von Daten auf diese Weise ist nützlich, um die Systemnutzung über einen bestimmten Zeitraum zu charakterisieren und die Spitzennutzungszeiten zu bestimmen.

Antwort2

Sie können eine einfache While-Schleife verwenden, die alle 5 Minuten die Ressourcennutzung der Top-Prozesse ausgibt.

while true; do
  date;
  ps -eo pid,ppid,cmd,%mem,%cpu --sort=-pcpu | head;
  echo;
  sleep 300;
done

Oben werden die 9 Prozesse ausgegeben, die die meiste CPU-Auslastung haben. Um die 9 Prozesse zu erhalten, die den meisten Speicher verbrauchen, verwenden Sie:

while true; do
  date;
  ps -eo pid,ppid,cmd,%mem,%cpu --sort=-pmem | head;
  echo;
  sleep 300;
done

Beispiel

Die folgende Beispielausgabe zeigt, dass Apache eindeutig unser Prozess mit dem höchsten CPU-Verbrauch ist.

Sun Jan 28 23:46:28 UTC 2024
  PID  PPID CMD                         %MEM %CPU
25130 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.7
12878 11432 /usr/sbin/httpd -DFOREGROUN  0.2  2.5
23903 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.4
  898 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  902 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  910 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 8397 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 9263 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
23911 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2

Sun Jan 28 23:51:28 UTC 2024
  PID  PPID CMD                         %MEM %CPU
25130 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.6
12878 11432 /usr/sbin/httpd -DFOREGROUN  0.2  2.4
23903 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.4
  898 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  902 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  910 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 8397 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 9263 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
23911 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2

Einschränkungen

Das ist natürlich Mist, denn es sagt Ihnen nur dieaugenblicklichRessourcennutzung zum genauen Zeitpunkt, wenn der Befehl ausgeführt wird (alle 5 Minuten).

Im Idealfall würde es Ihnen den durchschnittlichen Ressourcenverbrauch über denIntervallZeit zwischen den Ausgaben. Aber da diese Antwort seit 7 Jahren offen ist und es keine gute Antwort gibt, ist es besser als nichts.

Lassen Sie es über Nacht in einer screenSitzung laufen und am Morgen werden Sie (mit minimalem Aufwand) bessere Erkenntnisse haben.

verwandte Informationen