Unter Linux habe ich ein paar Prozesse, die gelegentlich zum Absturz neigen (Spieleserver), die am Ende 100% CPU verwenden.
Ich suche nach einem Programm oder Skript, um die CPU-Auslastung einer Liste von Prozessen nach Namen zu überprüfen. Wenn sie länger als das X. Mal, beispielsweise 30 Sekunden, zu 100% ausgelastet sind, töten Sie sie. Ich habe ps-watcher ausprobiert, konnte aber nicht feststellen, wie dies erreicht werden soll.
Nur den Prozess bei 100% Auslastung zu beenden, wird nicht funktionieren, da dies während des normalen Betriebs für kurze Zeiträume der Fall sein wird.
Ich habe auch dieses Skript gefunden, das zu tun scheint, was ich will, es ist jedoch auf einen Prozess beschränkt: Link
Jede Hilfe wird sehr geschätzt!
Antworten:
Versuchen Sie es mit Monit .
Sie könnten eine Konfiguration wie diese verwenden, um Ihre Aufgabe zu erfüllen:
Details zu dieser Konfiguration finden Sie in der Dokumentation von monit .
quelle
start program
undstop program
sind nur für den Fallmonit
, dass ein Neustart des Prozesses erforderlich ist. Sie können es weiterhin mit Ihrem normalen Init-Skript starten.monit
Sie können auch überprüfen, ob das Programm bereits ausgeführt wird (z. B. anhand der PID-Datei oder des Prozessnamens).Dies war das, wonach ich gesucht habe und benutze es seit einiger Zeit (leicht verändert). In letzter Zeit habe ich einen Fehler in meiner Arbeit gemacht, aber ich muss die App (den Spieleserver) am Laufen halten.
Ich hatte den Teil zitiert, in dem die oberste PID getötet wird, da dies die falsche PID tötete.
Hier ist mein neuester Entwurf Ihres Skripts. Bislang findet es die höchste Überlastung und beendet es effektiv (sendet mir auch eine E-Mail mit den Informationen, wann immer es etwas tut).
Dieses kleine Skript hat sich als äußerst nützlich erwiesen. Wenn Sie nicht möchten, dass ein Vorgang beendet wird, hilft Ihnen die E-Mail allein, Sie auf dem Laufenden zu halten.
quelle
TOPPROCESS
ist. Es wird nicht nach dem tatsächlichen Wert sortiert, sondern die Einträge werden alphanumerisch sortiert (z. B. haben 6% Vorrang vor 12%). Eine bessere Alternative könnte der folgende Befehl sein:top -b -n 1 | sed 1,6d | sed -n 2p
Unten finden Sie ein BASH-Beispielskript, mit dem Sie einige Tipps für Ihre eigenen Anforderungen erhalten können.
Bitte beachten Sie, dass der Wert Ihres $ CPU_THRESHOLD von der Anzahl der (CPU-) Kerne abhängen sollte, die Sie auf Ihrem System haben. Eine ausführliche Erklärung zu diesem Thema finden Sie unter http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages .
Sie können Ihr Skript entweder in der Datei / etc / inittab aufrufen oder für jede gewünschte Anzahl von Minuten einen Cronjob ausführen. Beachten Sie auch, dass das Beispielskript den obersten Prozess beendet, wenn $ CPU_LOAD größer als $ CPU_THRESHOLD ist.
quelle