Seit einigen Wochen habe ich das Problem, dass es 2-3 mal vorkam, dass mein Server plötzlich nicht mehr erreichbar ist. D.h. er ist noch pingbar, aber sämtliche Dienste stehen nicht mehr zur Verfügung. Aus diesem Grund habe ich vor kurzem ein ganz einfaches LOAD-Monitoring implementiert, welches alle 30s den Load des Servers in eine Datei schreibt. Also ganz simpel.
Nachdem das besagte Problem heute wieder auftrat, habe mir das Log dann mal angeschaut:
Thu Apr 3 11:57:39 2008 => 0.24 0.30 0.30 2/255 12575
Thu Apr 3 11:58:09 2008 => 0.26 0.30 0.30 2/274 12697
Thu Apr 3 11:58:40 2008 => 8.60 2.26 0.95 1/367 13078
Thu Apr 3 11:59:11 2008 => 22.13 6.15 2.29 1/409 13271
Thu Apr 3 11:59:47 2008 => 35.13 11.65 4.31 5/414 13346
Thu Apr 3 12:00:27 2008 => 44.38 16.80 6.34 50/449 13442
Irgendein Programm scheint also amok zu laufen. Nun meine Frage, bevor ich mich hinsetze und evtl. selbst das Rad in Form von einem Script neu erfinde: fallen euch spontan Lösungen (Programme/Scripte) ein, mit dem ich den Load überwachen - und ggf. den auslösenden Task beenden und neu starten kann?
Das damit das Problem an sich nicht gelöst ist, ist mir klar, jedoch würde dies die Problematik etwas entschärfen, bis ich den eigentlichen Fehler gefunden habe.
Hoher Load
-
- Project Manager
- Posts: 11190
- Joined: 2003-02-27 01:00
- Location: Hamburg
Re: Hoher Load
Es ist kein einzelner Prozess/Thread, sondern mehrere dutzend. Demnach tippe ich spontan auf Apache, genauer ein Apache-Modul. Vermutlich ein fehlerhaftes PHP/Python/Perl/Ruby-Script. Als erstes bitte das komplette System und danach alle WebApps auf den aktuellen Stand bringen und bei erneutem Auftreten des Problems ein "ps auxf" durchführen und den/die Prozess(e)/Thread(s) identifizieren.
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
-
- Posts: 250
- Joined: 2002-10-22 09:49
- Location: vorm Rechner
Re: Hoher Load
Also ein Script das den load überwacht kenne ich jetzt auch nicht, aber wenn du was neustarten willst solltest du ja erstmal wissen was. Schreib dir doch mal ein kleines Script das wenn der load größer 10 ist sich die CPU Fresser (es müssen ja mehr als einer sein) anzeigen lässt und die dann in eine Datei schreibt. Dann weißt du wenigstens schonmal was die Kopfschmerzen macht.
-
- Posts: 64
- Joined: 2003-12-03 02:32
- Location: Mainz
Re: Hoher Load
Das System ist, mitsamt allen Diensten + Libs etc, auf dem neusten Stand. Das mit den Webapps ist nicht so einfach, da dort diverse Kunden ihre Sachen selbst hochladen. Ich habe auch spontan an Apache gedacht, jedoch gibt es auch andere Dienste, die im laufenden Betrieb viele Prozesse/Threads gestartet haben (mysql, postfix, courier-imap/pop3).
-
- Posts: 64
- Joined: 2003-12-03 02:32
- Location: Mainz
Re: Hoher Load
Ja an sowas hatte ich auch gedacht. Hätte nur sein können, dass es da was Fertiges gibt, welches vielleicht noch umfangreichere Features hat. Naja dann schreib ich mal schnell mein 20-Perl-Zeiler runter...braindead wrote:Also ein Script das den load überwacht kenne ich jetzt auch nicht, aber wenn du was neustarten willst solltest du ja erstmal wissen was. Schreib dir doch mal ein kleines Script das wenn der load größer 10 ist sich die CPU Fresser (es müssen ja mehr als einer sein) anzeigen lässt und die dann in eine Datei schreibt. Dann weißt du wenigstens schonmal was die Kopfschmerzen macht.
-
- Administrator
- Posts: 2643
- Joined: 2004-01-21 17:44
Re: Hoher Load
<nitpick-mode>
Der Load Avg. leitet sich nur aus der Anzahl der Prozesse, nicht aus der Anzahl Threads ab. Von daher kannst Du MySQL schon mal ausschließen - allerdings nicht unbedingt als Ursache; könnte ja sein, dass der mysqld irgendeine Ressource blockiert, auf die andere Prozesse dann warten
</nitpick-mode>
Der Load Avg. leitet sich nur aus der Anzahl der Prozesse, nicht aus der Anzahl Threads ab. Von daher kannst Du MySQL schon mal ausschließen - allerdings nicht unbedingt als Ursache; könnte ja sein, dass der mysqld irgendeine Ressource blockiert, auf die andere Prozesse dann warten
</nitpick-mode>
-
- Project Manager
- Posts: 11190
- Joined: 2003-02-27 01:00
- Location: Hamburg
Re: Hoher Load
Das trifft mindestens auf Systeme mit NPTL nicht zu. Per "top [-H]" einfach zu sehen ;)jfreund wrote:Der Load Avg. leitet sich nur aus der Anzahl der Prozesse, nicht aus der Anzahl Threads ab.
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
-
- Posts: 23
- Joined: 2007-06-14 04:12
Re: Hoher Load
Ein wirklich ganz einfaches Script, wie ich es mir gebaut habe…
Das kann man leicht den eigenen Wünschen anpassen. Ob und wie man eigene CeckLogs hat/will liegt bei jedem selbst, wie auch was man da rein packt.
Code: Select all
#!/bin/sh
### Konstanten:
myDate=$(date)
today=$(date +%d)
yesterday=$(date --date=-1day +%d)
Email_To=an@mich.de
Email_From=ServerStatus@meineDomain.de
# Hier werden aus anderen Scripts tgl. selbst erzeugte Logs abgelegt
StatusDir=/var/log/checkLogs
###########################################################################
### Load-Check auf den 5min Wert - lass mich vom 1min Wert nicht stressen ;-)
#Email Sub für diesen Check
Email_Sub="Load: $(uptime | awk '{ print $(NF-2),$(NF-1),$NF }') "
# Hole das aktuelle Check-Log
UptimeFile=$StatusDir/uptimeStatus_Day__$today.log
# Isoliere den 5min Wert vor dem Komma
# ... damit ist bei einem !=0 die Last recht hoch
myLoad5=$(uptime | awk -F, '{ print$(NF-1) }' | awk -F. '{ print $1 }' | awk '{ print $1 }')
# Tempdatei, welche in die Email geschrieben wird
myEmailFile=$StatusDir/StatEmail.tmp
if [ "$myLoad5" != "0" ]
then
# Die letzten Eintragungen aus dem UptimeFile in die Email packen
echo "
*Auszug aus $UptimeFile* " > $myEmailFile
tac < $UptimeFile | head -n30 >> $myEmailFile
### Hier kommen dann alle weiteren Ausgaben, die man will/braucht...
#
echo "
*Ausgabe von: ps auxf* " >> $myEmailFile
ps auxf >> $myEmailFile
#
echo "
*Ausgabe von: netstat -tupa* " >> $myEmailFile
netstat -tupa >> $myEmailFile
# Dann die Email mit allem raus senden
>&1 | mail -r $Email_From -q $myEmailFile -s "$Email_Sub" $Email_To
# Und noch das TempFile löschen
rm $myEmailFile
fi