2013-06-06 7 views
8

Wie kann ich einen Prozess in Linux benchmarken? Ich brauche etwas wie "top" und "time" für einen bestimmten Prozessnamen (es ist ein Multiprozess-Programm, so viele PIDs werden gegeben)?Wie überwacht man einen Prozess in Linux CPU, Speicher und Zeit

Darüber hinaus würde ich gerne einen Plot über die Zeit der Speicher-und CPU-Nutzung für diese Prozesse und nicht nur endgültige Zahlen haben.

Irgendwelche Ideen?

Antwort

7

Im Folgenden sind die Werkzeuge zur Überwachung eines Linux-Systems

  1. Systembefehle wie top, free -m, vmstat, iostat, iotop, sar, netstat, etc. Nichts in der Nähe dieses Linux-Dienstprogramm kommt, wenn Sie ein Problem debuggen . Diese Befehle geben Ihnen ein klares Bild, das in Ihren Server hineingeht.
  2. SeaLion: Agent führt alle in # 1 genannten Befehle (auch benutzerdefiniert) aus und die Ausgaben dieser Befehle können in einer schönen Webschnittstelle aufgerufen werden. Dieses Tool ist praktisch, wenn Sie über Hunderte von Servern debuggen, da die Installation einfach ist. Und es ist kostenlos
  3. Nagios: Es ist die Mutter aller Überwachungs/Alarmierungs-Tools.Es ist sehr viel Anpassung, aber sehr schwierig für Anfänger einzurichten. Es gibt Sätze von Tools namens Nagios-Plugins, die so ziemlich deckt alle wichtigen Linux-Metriken
  4. Munin
  5. Server Density: Ein Cloudbased kostenpflichtiger Dienst, der wichtige Linux-Metriken speichert und gibt dem Benutzer die Fähigkeit eigene Plugins zu schreiben.
  6. New Relic: Ein weiterer gut bekannter Hosted Monitoring Service.
  7. Zabbix
+0

Überwachungsdaten enthält alle MMonit es ein Muss ist. Single Monit ist kostenlos, Cluster MMonit ist bezahlt. – erm3nda

13

Ich werfe normalerweise ein einfaches Skript für diese Art von Arbeit zusammen.

Werfen Sie einen Blick auf die Kernel-Dokumentation für das proc-Dateisystem (Google 'linux proc.txt').

Die erste Zeile von /proc/stat (Abschnitt 1.8 in proc.txt) gibt Ihnen kumulative CPU-Auslastung Statistiken (d. H. Benutzer, nett, System, Leerlauf, ...). Für jeden Prozess liefert die Datei /proc/$PID/stat (Tabelle 1-4 in proc.txt) sowohl prozessspezifische CPU-Nutzungsstatistiken als auch Statistiken zur Speicherauslastung (siehe rss).

Wenn Sie ein wenig googlen, finden Sie viele detaillierte Informationen zu diesen Dateien und Hinweise zu Bibliotheken/Apps/Code-Schnipsel, die Ihnen helfen können, die benötigten Werte zu erhalten/abzuleiten. In diesem Sinne konzentriere ich mich auf die High-Level-Strategie.

Für CPU-Statistiken verwenden Sie Ihre bevorzugte Skriptsprache, um eine ausführbare Datei zu erstellen, die eine Reihe von Prozess-IDs für die Überwachung benötigt. In einem festen Intervall (z. B. 1 Sekunde) die kumulativen Summen für jeden Prozess und das System als Ganzes abfragen/berechnen. Schreiben Sie während jedes Poll-Intervalls alle Ergebnisse in einer einzigen Zeile in stdout.

Schreiben Sie für Speicherstatistiken ein ähnliches Skript, aber protokollieren Sie einfach die Auslastung pro Prozessspeicher. Der Speicher ist etwas einfacher, da wir direkt die Momentanwerte erhalten.

Führen Sie dieses Skript für die Dauer Ihres Tests aus, übergeben Sie den Satz von Prozess-IDs, die Sie überwachen möchten, und leiten Sie seine Ausgabe in eine Protokolldatei um.

./logcpu $(pidof foo) $(pidof bar) > cpustats 
./logmem $(pidof foo) $(pidof bar) > memstats 

Importieren Sie den Inhalt dieser Dateien in eine Tabelle (für bestimmte Anwendungen ist das so einfach wie Kopieren/Einfügen). Für die CPU sind Sie auf Momentanwerte angewiesen, haben aber kumulative Werte. Sie müssen also einige Tabellenkalkulationen durchführen, um diese Werte abzuleiten (es ist nur das Delta 't (x + 1) - t (x)'). Natürlich könnten Sie Ihren CPU-Logger das Delta schreiben lassen, aber Sie werden etwas mehr Zeit für das Skript aufwenden.

Verwenden Sie schließlich Ihre Tabelle, um ein schönes Diagramm zu erstellen.

+0

schätzen zu sehen, dass/proc/$ PID dieses – Paul