Shell Script Debian 6 zur Apache2 CPU Überwachung

Hallo,
ich habe mir schon einen Wolf gesucht, finde aber nirgends eine entsprechende Info zu dem Thema, daher meine Frage an die Experten hier:
Ich suche ein shell script, welches ich per cron ausführen lassen kann, das folgendes macht oder kann:

Wenn ein Apache2 Prozess länger als x-Minuten eine CPU Auslastung von x-Prozent verursacht, soll ein killall -9 apache2 ausgeführt werden.

Klingt eigentlich nicht wahnsinnig komplex, aber meine kenntnisse reichen nicht aus und wie gesagt im netz habe ich noch nichts verwertbares gefunden. Ich hoffe ihr könnt mir helfen…?

Hi,

Wenn ein Apache2 Prozess länger als x-Minuten eine CPU
Auslastung von x-Prozent verursacht, soll ein killall -9
apache2 ausgeführt werden.

Mithilfe des Befehls

ps -A -o „%cpu pid fname“ | grep apache

lassen sich alle apache kommandos mit vorgestellter cpu-auslastung anzeigen. der mittlere teil der ausgabe ist die prozess-id

dies kann durch anhängen von

kommando >/var/log/bad-apache.log

in eine entsprechende log-datei umgeleitet werden
und durch eine ja nach shell etwa so aussehnder

for (;:wink:
kommando >foo.log
sleep 20
next;

schleife regelmäßig gemacht werden. (die könnte man dann beim hochfahren oder starten. oder die schleife lassen und ein skript machen was ebend per cron aufgerufen wird. wobei ich bezweifele das cron dafür die richtige wahl ist, soll ja vermutlich nicht erst nach einer minute passieren, und auf maximal solceh zeitabstände ist cron ausgelegt.)

ein bisschen im manual von etwa bash (verwende ich) wühlen sagt dir dann auch wie du in jeder zeile der ausgabe von

tail -n 10 /var/log/bad-apache.log

die erste spalte addierst und bei entprechender grenzwertüberschreitung den gewünschten kill erledigt.

Sage ich alles nur so theoretisch weil ich das anliegen an sich nicht nachvollziehen kann und für völlig auf dem falschen weg halte.

Wieso sollte man einen Webserver killen, der gerade gut zu tun hat? Für die Skalierung und Selbstkontrolle bei hoher last hat insbesondere der Apache hervorragende eigene Kontrollmöglichkeiten. Ein so unschönes wegkillen wird da sicher nicht die beste Lösung sein.

Also: wo hakts, warum hast du das vor? es gibt immer etwas besseres als einen Server zu killen.

Grüße

Hallo Shoto

natürlich könnte man ein Script schreiben, welcher überprüft, in welcher Auslastung der Apache gerade ist oder wie viel CPU-Belastung er gerade produziert, aber ich frage mich, wafür?

Im Normalfall gibt es die httpd.conf, in der Du den Apache anweisen kannst, wie lange er sich mit der Ausführung eines Befehls beschäftigen darf, bevor er diesen terminiert.
Wenn es ein Script ist, was läuft, kannst Du auch dies zeitlich begrenzen (bei php zB in der php.ini)

Sollte das nicht reichen, würde ich auf jeden Fall von einem cron abraten und lieber ein Script schreiben, was in einer Endlosschleife läuft… wenn es auf einen ‚wait‘ stößt, wird es ohne CPU-Belastung in den Hintergrund geschickt und Du kannst immer einen Soll/Ist Vergleich machen, ohne umständlich Werte zu sichern.

Bleibt die Frage, was Deinen Apache so an die Wand fahren könnte, das eine nennenswerte CPU Belastung über einen längeren Zeitraum entsteht?
Nur mit der Antwort lässt sich sagen, wie man am besten und am ressourcenschonendsten den Rechner überwacht und ggf einen Prozess terminiert.

LG,
Burkhard