Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

jUnit

Anfänger

  • »jUnit« ist männlich
  • »jUnit« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Aachen, Deutschland

Beruf: Software-Engineer

  • Nachricht senden

1

08.05.2006, 10:19

Seltsame Server-Hänger (Apache 1.3 + Mysql 5.0)

Guten Morgen zusammen!

Ich habe vor einigen Tagen für ein Community-Projekt drei Server (2x Web, 1x DB) in Betrieb genommen. Auf den beiden Webservern läuft Apache 1.3 (Debian-Package) mit PHP 4.1, es handelt sich um Athlon XP 2400+ - Maschinen mit 2 GB RAM mit Debian Sarge. Der Datenbankserver ist ein Athlon 64 X2 4200+ ebenfalls mit 2GB RAM, Debian Sarge AMD64 und MySQL 5.0 (tar-Distribution von mysql).

Da ja hinreichend bekannt ist, daß MySQL auf AMD64-Maschinen insbesondere unter Sarge Schwierigkeiten mit der verwendeten glibc hat, habe ich die libc6-2.3.6-7 von Debian installiert.

Jetzt tritt aber ein sehr eigenartiger Effekt auf. Von Zeit zu Zeit (ca. alle 10 bis 30 Minuten) hängt Aapche für einige Sekunden (ca. 15 bis 30 Sekunden), nichts tut sich, und danach geht es mit voller Geschwindigkeit weiter. D.h. wenn man eine Seite aufruft, passiert erst mal gar nichts ("warten auf servername..." im Browser) und dann nach ner kurzen Zeit kommt die Seite mit voller Geschwindigkeit. Eigenartig an dieser Situation ist, daß die Webserver vorher mit nicht allzu großer Last (höchstens 2.0) laufen, auch der Datenbankserver hat eine Last, die zwischen 0.2 und 0.8 pendelt. Wenn nun solch ein Stall auftritt, verschwinden die Apache-Prozesse bis auf zwei, die ganz oben stehen, aus der Prozessliste, die Last fällt immer weiter ab (teilweise bis auf 0.2), dann tauchen urplötzlich wieder jede Menge Apache-Prozesse auf, die Last schießt bis auf 7.0 und die Seiten werden geladen (und zwar mit voller Geschwindigkeit). Das ganze scheint unabhängig von der Auslastung des mysql-Servers zu sein, dennoch tritt dieses Problem zeitgleich auf beiden Webservern auf, bevorzugt, wenn auf die Seite von vielen Clients zugegriffen wird. An sonsten läuft das ganze ziemlich zügig, auch unter hoher Last.

Und noch etwas ist mir aufgefallen... zeitweise (aber eher selten) kommt es vor, daß die Datenbank offenbar nicht mehr reagiert. Dann stellt sich die Last auf dem Datenbankserver bei 0.99 ein und die Webserver timen bei einer Anfrage aus (keine Fehlermeldungen!). Ein Neustart des Datenbankservers (per mysql restart) behebt das Problem sofort, auch ein Abschießen der mysqld-Prozesse ist, wie bei der alten glibc, nicht erforderlich, /etc/init.d/mysql kann die selbst beenden.

So, jetzt hoff ich, irgendjemand hat eine Idee, woran das liegen könnte. Falls ihr irgendwelche Konfigurationsdateien braucht, einfach fragen... mysql ist übrigens über die my-huge.cnf konfiguriert, lediglich max-connections wurde auf 1000 gesetzt.

Gruß,

Henning

2

08.05.2006, 11:50

Also wenn die Datenbank Deiner Ansicht nach neu gestartet werden will, guck mal vorher via "SHOW PROCESSLIST" (via MySQL-Client oder phpMyAdmin) nach, ob nicht gerade eine wichtige Query läuft ...
ansonsten könnte von MySQL das Error-Log oder slow_query_log was hergeben ...

Dass einfach Apache-Prozesse verschwinden ist etwas seltsamer! Hast Du zu diesen Zeiten im Syslog oder Apaches error_log keine Meldungen?
Was sagt netstat -t in Bezug auf HTTP- und MySQL-Verbindungen zu diesen Zeiten?
Oder sind die Prozesse warted im Leerlauf (pstree -> Anzahl httpd-Prozesse?)

Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

jUnit

Anfänger

  • »jUnit« ist männlich
  • »jUnit« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Aachen, Deutschland

Beruf: Software-Engineer

  • Nachricht senden

3

08.05.2006, 12:39

Hm, also das Error-Log sagt gar nichts, da scheint alles in Ordnung zu sein.. aber wenn das Problem das nächste mal auftritt werd ich da noch mal reinschauen, ebenso in die Process List.

Bei der Process List ist mir jetzt aber etwas aufgefallen. Gestern abend hatten wir ca. 400 Leute gleichzeitig auf der Seite, bis auf die Hänger lief eigentlich alles recht zügig, die Last des DB-Servers pendelte zwischen 0.4 und 0.8. Heute sind jedoch nur etwa 200 User online, und die Datenbanklast pendelt zwischen 1.0 und 2.5, obwohl nichts an der Konfiguration etc. verändert wurde. Die ProcessList zeigt außerdem einen haufen gelockter Prozesse, die sich alle auf die User-Tabelle beziehen. Wie gesagt, es wurde nichts geändert und das Problem trat gestern abend nicht auf...

jUnit

Anfänger

  • »jUnit« ist männlich
  • »jUnit« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Aachen, Deutschland

Beruf: Software-Engineer

  • Nachricht senden

4

08.05.2006, 22:37

Entwarnung!

OK, ich kann mal allgemein Entwarnung geben. Das Problem (mit dem plötzlich langsamer gewordenen mysql) ist inzwischen gelöst, zwei Ursachen:

1. Table Locks auf stark genutzten Tabellen (Lösung: Tabelle konvertiert nach innoDB)

2. Table Scans bei bestimmten Abfragen: Ich habe ein symmetrisches Buddylisten-System, das bisher von der Datenbank zusammengeführt und sortiert wurde. Da aber eine a INNER JOIN b ON (a.a = const AND a.b = b.a) OR (a.b = const AND a.a = b.a) - Abfrage nicht wirklich mit Keys zu optimieren ist, hat mysql hier sehr ineffiziente Table-Scans durchgeführt. Das hab ich geändert, die Buddyliste wird zwei mal asymmetrisch eingelesen und erst im PHP-Skript zusammengeführt und sortiert.

Ich hatte wohl nicht bedacht, daß die Buddylisten über nacht stark angewachsen sind (aufgrund von Datenkonvertierungen)

Und siehe da, nach Behebung der beiden Schwierigkeiten läuft die Datenbank auch bei 300 Usern wieder mit einer Last von 0.2 :)

Auch das Hänger-Problem ist seither nicht mehr aufgetreten.

Dennoch danke für den Versuch, mir zu helfen!

5

08.05.2006, 23:50

Na, das mit den join(t)s hat Dir wohl das slow_query_log verraten ;)
Argl, ich verstehe nicht, wie die Leute immer so fröhlich frei Joins verwenden!
Die Dinger sind Gift (pfui deibel)!!11!!111 ;)

Gut dass Du die Lösung mit der Datenbank mal hier reinschreibst, vielleicht hilft das ja ein paar Leuten :applaus:

Für beide Lösungen muss man aber die Anwendung kennen, daher konte ich Dir klarer Weise nicht wirklich helfen ;)

Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

Thema bewerten