Wie kann die Speichernutzung / CPU-Auslastung von Prozessen über einen längeren Zeitraum überwacht und protokolliert werden? [geschlossen]

30

Ich suche nach einer Möglichkeit, Probleme wie Swap-Tod zu diagnostizieren, bei denen ein Speicherausgleich den Swap auffüllt und die gesamte Maschine (wie Apache) tötet.

Ich verwende bereits Kakteen und kann Nagios (obwohl ich es lieber nicht möchte) oder Munin einrichten, aber soweit ich das beurteilen kann, können sie nicht die individuelle Programmnutzung aufzeichnen - nur den Gesamtstatus.

Ich weiß, dass ich alle 30s ein Skript erstellen kann, das auf eine Datei >> verweist, aber ich würde gerne sehen, ob es bereits eine ausgereifte Lösung gibt.

Idealerweise wäre es wieder:

  • Speicherverbrauch der Prozesse alle N Sekunden aufzeichnen
  • Zeichnen Sie die CPU-Auslastung der Prozesse alle N Sekunden auf
  • Support-Charts und Geschichte
  • Support-Durchschnittswerte - so wie mysqld am letzten Tag 43% der CPU verbraucht hat und durchschnittlich 400 MB Arbeitsspeicher hat
  • Sei frei und Open Source

Prozessnamen sind und sollten nicht im Voraus bekannt sein - die Idee ist, sie nur überwachen zu lassen und dann einen Blick auf die Top-Täter zu werfen.

Mein System ist Linux (OpenSUSE).

Artem Russakovskii
quelle
Möchten Sie einen Prozess überwachen , der möglicherweise einen Speicherverlust aufweist (die Top-N-Speicherverluste), oder möchten Sie einen definierten Satz von Prozessen überwachen (z. B. Apache-Webserver und einen Tomcat-Prozess)? Letzteres ist mit einigen einfachen Nagios- oder Cacti-Plugins möglich. Ersteres ist schwieriger. Sie sollten dies klarstellen.
Stefan Lasiewski
Ich habe es bereits in der Post geklärt, aber um es noch einmal zu klären: Ich möchte den Zustand des Systems kennen, wenn es aufgrund eines Swap-Todes ausfällt. Ich möchte wissen, wer die schlimmsten Straftäter sind. Übrigens muss es nicht unbedingt ein Speicherverlust sein - nur ein Zustrom von Daten oder was auch immer zu einer hohen Speichernutzung führt. Daher sollte auch hier keine vorherige Kenntnis der Binärnamen konfiguriert werden.
Artem Russakovskii
möglich Duplikat - serverfault.com/questions/67234/...
warren
Warren, das ist eine ganz andere Frage.
Artem Russakovskii
8
Es war eine schlechte Sache, einen so guten Beitrag zu schließen, vor allem nach 4 Jahren im Nachhinein.
Peter sagt wieder Monica

Antworten:

16

Wenn Sie nur die besten Straftäter haben möchten, sollten Sie in Betracht ziehen, topim Batch-Modus mit einem relativ langen Intervall (60 Sekunden plus) zu arbeiten. Möglicherweise müssen Sie mehr als eine topAusführung ausführen, um die Top-Täter auf mehreren Ressourcen zu erfassen. Ich habe Systeme so konfiguriert, topdass sie einige Zyklen lang ausgeführt werden, wenn eine Ressource überlastet war.

Ziehen Sie sarin Betracht, im Stapelmodus zu arbeiten, um die Ressourcennutzung zu erfassen. Mir ist klar, dass dies serverbasiert ist, aber es ist nützlich, die Zeiten zu bestimmen, zu denen Probleme auftreten.

muninBenachrichtigungen ausführen und aktivieren. Dies kann Ihnen die Möglichkeit geben, in den Server einzusteigen und zu beobachten, wie dieser ausfällt. Möglicherweise können Sie das Problem beheben, bevor es nicht mehr funktioniert.

Bei Speicherverlusten weist ein stetiger Anstieg der Auslagerungsnutzung auf ein Problem hin. Ich habe einmal beobachtet, wie ein Server über einen Zeitraum von Tagen langsam starb. Der Problemdienst war ein Programm, das andere Prozesse auf Speicherverluste überwacht. Der Systemadministrator beharrte darauf, dass die zunehmende Auslagerungsnutzung kein Problem war, bis der Server nicht mehr reagierte.

Möglicherweise können Sie cfenginemithilfe der Anomalieerkennung ein Skript auslösen, um den Systemstatus zu erfassen, wenn Probleme auftreten. Möglicherweise möchten Sie neben den Prozessen mit den meisten Ressourcen auch viele andere Informationen. Für einen plötzlichen Nutzungsanstieg möchten Sie möglicherweise eine Liste der Netzwerkverbindungen (nach Adresse, nicht nach Name). Die Speichernutzung ist ebenfalls nützlich.

BillThor
quelle
12

sysstat ist so ziemlich genau für Ihre Zwecke gemacht.

Peter Eisentraut
quelle
Hier sollten Sie beginnen. Sie können nicht wissen, wo Sie eine Prüfung beginnen sollen, bis Sie wissen, wo Sie die besten Chancen haben. Sysstat ist das, was Sie suchen (hat auch hübsche Grafiken). Sobald Sie mehr wissen, verwenden Sie systemtap.
Allen
9

Ich habe oben verwendet, bevor:

http://freshmeat.net/projects/atop/

"Atop ist ein ASCII-Vollbild-Leistungsmonitor, der in der Lage ist, die Aktivität aller Prozesse (auch wenn die Prozesse während des Intervalls beendet wurden) sowie die tägliche Protokollierung der System- und Prozessaktivität für die Langzeitanalyse zu protokollieren und überlastete Systemressourcen mithilfe von hervorzuheben Farben usw. In regelmäßigen Abständen werden Aktivitäten auf Systemebene in Bezug auf CPU, Speicher, Swap, Festplatten und Netzwerkebenen sowie für jeden aktiven Prozess die CPU-Auslastung, das Speicherwachstum, die Priorität, den Benutzernamen, den Status, und Exit-Code. "

NinjaCat
quelle
atop scheint keinen Bericht zu haben, der mir das liefert, was ich wollte. Bitte korrigieren Sie mich, falls ich falsch liege.
Artem Russakovskii
Es kümmert sich um Ihre ersten beiden Aufzählungspunkte (Speicher / CPU pro Prozess). Sie können die Bibliothek verwenden, um diese Statistiken zu sammeln und dann Ihren Verlauf / Ihre Grafik basierend auf den Daten zu erstellen.
NinjaCat
4
@ artem-russakovskii - Standardmäßig protokolliert atop alle zehn Minuten Daten in einer Datei. Wenn Ihr Server um 3:45 abstürzt, können Sie mit beginnen atop -r log_filename, indem Sie auf drücken m, um zur Ansicht für die prozessbezogene Speichernutzung zu wechseln, und dann auf drücken t, um in Schritten von 10 Minuten bis 3:40 vorwärts zu gehen. Weitere Informationen zu den Grundlagen der Verwendung von atop finden Sie unter lwn.net/Articles/387202. Ein Beispiel zum Erkennen eines Speicherverlusts finden Sie unter atoptool.nl/download/case_leakage.pdf
sciurus
6

Haben Sie versucht, gesammelt?
Es ist sehr leistungsfähig und anpassbar.
Hat viele Plugins und könnte mit Nagios integriert werden.

http://collectd.org/features.shtml

PiL
quelle
Collectd ist sehr leicht, nicht zu schwierig einzurichten und lässt Sie das Wachstum von Speicher / Swap im Laufe der Zeit beobachten. Es wird jedoch die störenden Prozesse nicht genau bestimmen - aber vielleicht können Sie das Gedächtniswachstum mit der Zeit bemerken und erfassen und die Situation manuell überprüfen top.
Marius Gedminas
1
Ich muss sagen, dass ich dieses Plugin nicht ausprobiert habe, sondern aus dem Handbuch des Prozess-Plugins von collectd gelesen habe: "Wenn Prozesse ausgewählt sind, werden die folgenden Informationen gesammelt. Alle diese Informationen werden durch den Prozessnamen aggregiert. Seine residente Segmentgröße, Verwendete Benutzer- und Systemzeit, Die Anzahl der Prozesse mit diesem Namen, Die Anzahl der Threads (summiert über alle Prozesse), Die Anzahl der Haupt- und Nebenseitenfehler. Grobe E / A-Nummern (Bytes, die aufgrund geschrieben und gelesen wurden) zu Syscalls durch den Prozess).
PiL
Sie können die Prozesse nach Namen oder nach Regex auswählen.
PiL
2

Centreon auf Nagios, Nagios in Verbindung mit NRPE. Sie können dann benutzerdefinierte Skripte schreiben, um Daten in JEDEM gewünschten Format an NRPE zu melden. Nagios fragt dann die Daten von Remote-Servern mit NRPE ab, und Centreon erstellt ein hübsches Diagramm und erhöht die Flexibilität der Benutzer erheblich. Wir verwenden es über http://beyondhosting.net Ich habe bereits eine VZ Container Vorlage mit Centreon + Nagios Setup, wenn Sie es wollen.

Graphs Centeron erstellt hostthenpost.org/tyler/2010-07-23_1719.png

VisBits
quelle
Ich hätte gerne eine fertige Lösung für das Melden der Dinge, die ich erwähnt habe. Ich bin mir auch nicht sicher, was VZ ist.
Artem Russakovskii
2

nmon ist ein großartiges Tool, das genau das tut, wonach Sie suchen. Entwickelt für AIX und Linux. Produziert eine Tonne detaillierter Ausgaben und kann einfach in Berichte eingefügt werden. Wenn Sie es googeln, gibt es ein IBM-Wiki mit einer Reihe von Dokumentationen und zusätzlichen Hilfsprogrammen zum Parsen der Daten.

Mattkoffein
quelle
2

Server Density macht genau das, was Sie beschreiben.

Ich benutze es auf einem unserer Produktionsserver und freue mich sehr darüber. Die wichtigste Funktion ist die Möglichkeit, Diagramme anzuzeigen, auf einen Peak zu klicken und den aktuellen CPU- / Speicherverbrauch des Servers einschließlich aller ausgeführten Prozesse anzuzeigen. Sie nennen es Schnappschüsse .

Es verbessert sich ständig. Eine der neuesten Funktionen ist die Erkennung von Anomalien , mit der Sie Anomalien auf einfache Weise erkennen können. Sie können auch verschiedene Schwellenwerte einstellen

Aron Rotteveel
quelle
1
Ah, ich habe vergessen, den kleinen Teil zu erwähnen, wo ich es vorziehen würde, frei und wenn möglich Open Source zu sein. Über 100 Dollar pro Server sind nicht das, was ich ausgeben möchte (und ich habe nur 1 Server, nicht 5). serverdensity.com/pricing
Artem
2

Die vorgeschlagenen Antworten, als ich eine ähnliche Frage stellte :

Icapan sagte :

Munin ist der einfachste Weg, um mit minimalem Installations- und Konfigurationsaufwand Betriebszeitdiagramme zu erhalten. Ich verwende atop auch für die Nutzung der CPU durch einen bestimmten Prozess, aber das ist nicht das, wonach Sie gefragt haben.

David Spillet sagte :

Ich benutze collectd , um die Systemlast unter einer Reihe anderer Parameter aufzuzeichnen. Es speichert die Daten in RRD- Speichern, die mithilfe der vielen verfügbaren Tools und Skripts grafisch dargestellt und anderweitig analysiert werden können. Ich verwende eine modifizierte Version dieses Skripts für meine grafische Darstellung ( Beispielausgabe ).

Collectd verfügt über Plugins zum Überwachen vieler Dinge (alles, was häufig benötigt wird, und ein paar Dinge darüber). Das Erstellen eigener Plugins sollte nicht schwierig sein, wenn Sie etwas Spezielles benötigen. Dies macht das Tool also sehr flexibel. Das Konfigurieren der Diagramme in rrd.cgi ist ein sehr manueller, wenn auch nicht schwieriger Vorgang, obwohl Sie möglicherweise ein bequemeres Werkzeug zum Arbeiten mit den von collectd verwalteten RRD-Dateien finden.

Sie können auch Nagios oder OpenNMS überprüfen .

Labyrinth
quelle
1

Munin erledigt alles, was Sie benötigen, ohne Nagios oder ein anderes Tool zu benötigen. Für OpenSUSE stehen RPMs zur Verfügung.

gareth_bowles
quelle
Funktioniert das mit einem Plugin? Wenn ja, welches? Es ist mir nicht gelungen, einen zu finden, für dessen Überwachung keine vorkonfigurierte Liste von Prozessen erforderlich ist.
Artem Russakovskii
Aus Ihrer ursprünglichen Frage ging nicht hervor, dass Sie keine vorkonfigurierte Liste von Prozessen überwachen möchten. Können Sie mehr Details zu Ihren Anforderungen bereitstellen?
gareth_bowles
Klarstellung: Prozessnamen sind und sollten nicht im Voraus bekannt sein - die Idee ist, sie einfach überwachen zu lassen und dann einen Blick auf die Top-Täter zu werfen.
Artem Russakovskii
1

Vielleicht macht das gute alte OProfile was du brauchst? Es ist ein kernelbasierter Profiler auf Systemebene mit nur ein paar Prozent Overhead.

Dann gibt es noch ein exzellentes Perl-Skript, PSMon , mit dem Sie alle Arten von CPU- / Speicherbeschränkungen einrichten können. Wenn diese überschritten werden, protokolliert psmon einen Fehler und / oder bricht den fehlerhaften Prozess ab.

Letzterer würde Ihnen keine Profilerstellungsberichte erstellen, aber wenn er beschließt, denselben Prozess immer wieder abzubrechen, haben Sie wahrscheinlich den bösen Bastard gefunden, nach dem Sie gesucht haben. :-)

Janne Pikkarainen
quelle