Wer misst, misst Mist

Es gibt ja in der Physik das Gesetz, dass man durch die Messung das Ergebnis beeinflusst. Wenn man z.B. den Ort eines winzig kleinen Teilchens messen will, muss man es sehen. Das bedeutet, man beschießt es mit Licht (besser, mit Photonen). Und dadurch wird das Teilchen beschleunigt (Unschärferelation)

Bei mir war das so:
Meine Internet Lernkartei (http://www.web-lernbox.de) hatte „Schluckauf“. Nachdem ich ein wenig am Server umgestellt hatte, antwortete die Seite manchmal nicht mehr. Auch der Wechsel von einem Server zu einem Mongrel-Cluster half nicht (machte es nur noch schlimmer, aber das habe ich erst später verstanden). Kurzer Einschub: Mongrel ist ein Server für RubyOnRails.

Um zu verstehen, wann der Fehler auftritt, habe ich Monit installiert. Monit ist ein sehr nettes Überwachungstool. Es ist einfach zu konfigurieren und kann Server selbstständig wieder starten.

Um nun Mongrel mit Monit zu überwachen, habe ich also folgendes gemacht:
– Monit herunterladen
– entpacken,
– der klassische Unix-Dreisprung: ./configure, ./make, ./make install

Meine Konfigurations sieht ungefähr so aus:
set daemon 60
set httpd port XXXX and
use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server and

##### mongrel 8000 #####
check process mongrel-8000 with pidfile /[PFAD ZUR WEB-LERNBOX]/log/mongrel.8000.pid
group lernbox
start program = "/usr/local/bin/ruby /usr/local/bin/mongrel_rails start -d -e production -p 8000 -a 127.0.0.1 -P /[PFAD ZUR WEB-LERNBOX]/log/mongrel.8000.pid -c /[PFAD ZUR WEB-LERNBOX]"
stop program = "/usr/local/bin/ruby /usr/local/bin/mongrel_rails stop -P /[PFAD ZUR WEB-LERNBOX]log/mongrel.8000.pid"

if totalmem is greater than 90.0 MB for 5 cycles then restart # eating up memory?
if cpu is greater than 50% for 2 cycles then alert # send an email to admin
if cpu is greater than 80% for 3 cycles then restart # hung process?
if loadavg(5min) greater than 10 for 8 cycles then restart # bad, bad, bad
if 3 restarts within 5 cycles then timeout # something is wrong, call the sys-admin

if failed port 8000 protocol http # check for response
with timeout 10 seconds
then restart

Das ganze muss leider für alle Mongrel Instanzen wiederholt werden. Monit kann natürlich alle Dienste überwachen. Hier ist eine nette Beispielkonfiguration.

Was passiert also: Monit schaut alle 60 Sekunden nach, ob meine Lernbox noch lebt.

Tja, und was ist passiert? Die Box stürzte nicht mehr ab. Durch die Messung wurde das Problem behoben.

Mittlerweise habe ich es auch verstanden. Es ist ein Bug: Die Datenbank (MySQL) bekommt einen Timeout, Mongrel wartet aber immer noch auf die Antwort. Dadurch hängt der Server. Durch die ständige Messung habe ich den Timeout natürlich verhindert. Und durch den Mongrel-Cluster habe ich es erst richtig schlimm gemacht. Nachts lernt natürlich kaum jemand. Also war wenig los und die Server haben sich reihenweise verabschiedet…

Wie auch immer: Wer sich in den letzten Tagen geärgert hat, weil er die Lernbox nicht erreichen konnte: Geht wieder…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

What is 3 + 15 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)