Problem:
In MySQL liefert show processlist
sehr viele Verbindungen, obwohl momentan recht wenig auf dem Server los ist. Selbst Scripte die mysql_close()
aufrufen, lösen die Verbindung nicht auf.
Dies liegt an den 'persistenten Verbindungen' von PHP. Es ist eine deutliche Performance-Steigerung, wenn sich ein Script nicht jedesmal neu einloggen muß um eine Datenbankabfrage zu starten. PHP verwaltet die Connections intern und hält diese offen.
Oftmals kommt es vor, daß einige Verbindungen einfach nicht beendet werden, oder (z.B. auf vServern) der Speicher ausgeht oder MySQL irgendwann keine neue Verbindung herstellen will/kann.
Lösung:
Die Anzahl der persistenten Verbindungen kann man mit den Parametern max_persistent
und max_links
regulieren. Wenn beide Werte auf -1
stehen, kann o.g. Problem auftauchen. Die passenden Werte muß man selbst anhand vom anfallenden Traffic/Hits ermitteln. Auf jedenfall muß max_links
deutlich höher sein als max_persistent
. Sonst hat PHP keine Ausweichmöglichkeit mehr.