22.8.2009
Zusammenfassung für die Führungsebene
Der Webserver des AStA hing manchmal. Das ist jetzt hoffentlich nicht mehr so.
Symptome
Wie manche vllt. bemerkt haben ging manchmal der Webserver nicht mehr. Die Symptome für Nutzer waren das der Web Browser auf einmal oder von Anfang an unendlich viel Zeit brauchte um eine Seite zu laden.
Ich hatte bereits kurz zuvor ein Monitoring installiert das spätestens nach 5 Minuten merkte, das was nicht stimmt und eine Mail los schickte. Aufgefallen ist es also direkt. Allerdings war eben ein manueller Eingriff nötig um den Hänger zu beheben.
Lösungsmöglichkeiten
Nachdem klar war das es kein einmaliges Problem ist und es wohl einfach mit dem Upgrade auf Apache 2.2.11 (+ CVE bug fixes + Solaris patches) in Suns Webstack 1.5 zusammen hängt, hab ich in Erwägung gezogen einfach auch alles selbst zu kompilieren um den Fehler zu umgehen.
Ich hatte mich aber dagegen entschieden, weil: - zumindest theoretisch eine feste Zusammenstellung für die es offizielle Unterstützung und auch Service Verträge gibt, die Wartbarkeit für andere (ausser Leuten die sich das sowieso selbst bauen) erhöht. - es Leute im Sun Webstack Team und Apache Team gab, die sehr interessiert an den Ursprüngen des Fehlers waren und für die ich Informationen aus dem hängenden Apache gezogen habe um ihnen die Fehlersuche zu ermöglichen.
Der Weg zur Lösung
Aufgrund des zweiten Punktes hab ich mich auch dagegen entschieden Anstrengungen zu unternehmen um einen automatischen Wiederstart beim Hängen zu veranlassen. Die meiste Zeit über gab es Interessenten die wissen wollte wie denn dies oder jenes aussieht wenn Apache hängt. Und leider konnte ich den Zustand nicht selbst provozieren. Wir waren einige Zeit darauf angewiesen das es mal wieder hängt.
Siehe: https://issues.apache.org/bugzilla/show_bug.cgi?id=47645
Siehe: http://opensolaris.org/jive/thread.jspa?threadID=110818
Siehe: http://forums.sun.com/thread.jspa?threadID=5402863&tstart=0
Irgendwann war dann klar warum es wo hängt und es gab eine Patch Idee. Das war aber noch nicht die Lösung für uns, das hilft nur generell wenn man Apache 2.2.12+ selbst kompiliert und eben selbst die Patches einspielt. Einer von Suns Webstack Team war dann so nett eine Bibliothek zu bauen und mir zu schicken, die die Kernel Aufrufe die Apache falsch interpretiert abfängt und die Rückgabewerte so anpasst, dass Apache das richtige macht.
Siehe: http://developers.sun.com/solaris/articles/lib_interposers.html
Siehe: http://getthegood.com/TechNotes/Papers/interpose.html
Ergebnis
Wir können also bei unserer vorgefertigten Lösung bleiben (hoffe ich), bis in 5.5 Monaten wieder eine neue Version von Sun raus kommt. Und Upstream beim Apache Team wird der Fehler wohl auch für alle behoben werden (APR 1.3.9 (?), da der Fehler nicht direkt in Apache steckt, siehe http://apr.apache.org/ ).
Ergänzung zum Ergebnis (22.11.2009)
Wie angekündigt ist der Fehler "upstream" bei Apache behoben worden:
*) SECURITY: CVE-2009-2699 (cve.mitre.org) Fixed in APR 1.3.9. Faulty error handling in the Solaris pollset support (Event Port backend) which could trigger hangs in the prefork and event MPMs on that platform. PR 47645. [Jeff Trawick]
Jetzt fehlt nur noch das wir eines Tages auch auf Apache 2.2.14 oder grösser wechseln. Vermutlich wird das mit dem Update von Sun Webstack passieren.