Page 1 of 1
serverload > 80
Posted: 2004-05-25 14:26
by tobiask
hi,
seid heute ist die serverload plötzlich über 80!!
in der processtabelle sind massig mysql connections drin.
aber wir haben nichts seid gestern geändert und wissen nicht wo die her kommen ...
wie kann ich den mysql timeout verringern das die nicht benutzen prozesse schneller gekillt werden?
auch waren massig zombies unterwegs ... :(
weiß aber grader keinen rat woher oder wieso die da sind.
hoffe ihr könnt mir helfen.
Re: serverload > 80
Posted: 2004-05-25 15:42
by Joe User
Es läuft mindestens ein PHP-Script amok und Du lässt persistente DB-Verbindungen zu.
Lösung1: Die Scripte überarbeiten und Persistente Verbindungen in der php.ini deaktivieren.
Lösung2: Die Scripte überarbeiten und mod_php gegen PHP-CGI austauschen.
Re: serverload > 80
Posted: 2004-05-25 16:03
by tobiask
Joe User wrote:Es läuft mindestens ein PHP-Script amok und Du lässt persistente DB-Verbindungen zu.
Lösung1: Die Scripte überarbeiten und Persistente Verbindungen in der php.ini deaktivieren.
Lösung2: Die Scripte überarbeiten und mod_php gegen PHP-CGI austauschen.
habe den übeltäter jetzt gefunden, ist was wbboard ...
was genau sind Persistente Verbindungen?
und gibt es nachteile wenn diese deaktiviert sind?
Re: serverload > 80
Posted: 2004-05-27 13:48
by kase
Persistente Connections sind dauerhafte Connections zum mySQL Server. Das bedeutet soviel, dass der Apache (mod_php) die Connection einmal aufbaut, und dann so lange offen hält, und immer wieder die gleiche Connection benutzt wird, bis du den Apache beendest.
Der einzige Nachteil von "normalen" Connection ist, dass mit jedem Seitenaufruf immer und immer wieder eine neue Connection aufgemacht und am Ende wieder beendet wird. Hört sich jetzt erstmal schlimmer an, als es ist, denn der mySQL Overhead um eine Connection zu öffnen ist minimal, somit wird die Performance nicht merkbar verschlechtert. Vorteile hat man dadurch aber eine ganze Menge, zB treten keine "toten" persistenten Connections auf, oder gerade auch in Verbindung mit Transaktionen hat man dadurch extreme Vorteile, wenn zB mal aus unbekanntem Grund eine Transaktion nicht richtig commited wird, usw.
Re: serverload > 80
Posted: 2004-05-27 14:14
by arty
Wenn PHP als CGI läuft, dann gibts keine persistenten MySQL-Verbindungen, auch wenn pconnect() genutzt wird. PHP ignoriert das dann.
bye
Thorsten
Re: serverload > 80
Posted: 2004-05-27 14:22
by tobiask
kase wrote:Persistente Connections sind dauerhafte Connections zum mySQL Server. Das bedeutet soviel, dass der Apache (mod_php) die Connection einmal aufbaut, und dann so lange offen hält, und immer wieder die gleiche Connection benutzt wird, bis du den Apache beendest.
Der einzige Nachteil von "normalen" Connection ist, dass mit jedem Seitenaufruf immer und immer wieder eine neue Connection aufgemacht und am Ende wieder beendet wird. Hört sich jetzt erstmal schlimmer an, als es ist, denn der mySQL Overhead um eine Connection zu öffnen ist minimal, somit wird die Performance nicht merkbar verschlechtert. Vorteile hat man dadurch aber eine ganze Menge, zB treten keine "toten" persistenten Connections auf, oder gerade auch in Verbindung mit Transaktionen hat man dadurch extreme Vorteile, wenn zB mal aus unbekanntem Grund eine Transaktion nicht richtig commited wird, usw.
danke :)
hab die jetzt ausgestellt und läuft jetzt wieder einwandfrei!
danke für die hilfen und für die gute erklärung :)
Re: serverload > 80
Posted: 2004-05-27 21:12
by majortermi
kase wrote:Der einzige Nachteil von "normalen" Connection ist, dass mit jedem Seitenaufruf immer und immer wieder eine neue Connection aufgemacht und am Ende wieder beendet wird. Hört sich jetzt erstmal schlimmer an, als es ist, denn der mySQL Overhead um eine Connection zu öffnen ist minimal, somit wird die Performance nicht merkbar verschlechtert. Vorteile hat man dadurch aber eine ganze Menge, zB treten keine "toten" persistenten Connections auf, oder gerade auch in Verbindung mit Transaktionen hat man dadurch extreme Vorteile, wenn zB mal aus unbekanntem Grund eine Transaktion nicht richtig commited wird, usw.
Das eigentliche Problem von persistenten Connections ist - wie du gesagt hast - die mangelnde Kontroller und Transparenz in PHP.
Ein Connection-Pooling ist z.B. bei Java-Servlets auch sehr üblich, funktioniert dort allerdings (wenn der Entwickler aufpasst) so, dass eine Verbindung für eine Transaktion vom Pool angefordert und am Ende dieser wieder zurückgegeben wird - unabhängig davon, ob die Transaktion erfolgreich war oder nicht. Das lässt sich dort allerdings auch sehr einfach realisieren, weil man im Falle einer fehlgeschlagenen Transaktion einfach eine Exception auswerfen und sie dort wieder fangen kann, wo die Verbindung angefordert wurde, um sie wieder zurückzugeben.
Vielleicht wird sich das ja mit der Untstützung von Exceptions in PHP 5 auch verbessern.
Re: serverload > 80
Posted: 2004-05-28 13:35
by kase
Mir ging es dabei eher um Scriptabbrüche, die in PHP immer mal wieder vorkommen, im simpelsten Falle, wenn der User auf den "Abbrechen" Button klickt, bevor das Script beendet ist, und man PHP nicht sagt, dass es dann weitermachen soll. Da nutzt dir dann das beste Error/Exception Handling nix, die einzigste Möglichkeit, die bleibt, da irgendwas mit der register_shutdown Function zu prüfen/machen, aber da ich eh keine pconnects verwende, habe ich mich mit diesem Problem noch nicht wirklich auseinander gesetzt.
Edit: Ist das nicht eigentlich ein Thread mit dem Thema mySQL, vielleicht könnte den ein Admin verschieben...
Re: serverload > 80
Posted: 2004-05-28 14:47
by Joe User
kase wrote:Edit: Ist das nicht eigentlich ein Thread mit dem Thema mySQL, vielleicht könnte den ein Admin verschieben...
[x] Done.