Okay Leute,So finden & fix memleaks innerhalb Apache + PHP + Win2k3
Wir haben Apache 2.2.11 Mod_php 5.2.9-2 auf einem Windows Server 2003 (Small Business Edition) Box läuft, und Jede Anfrage erreicht irgendwo zwischen 4 und 8 MB RAM, gefolgt von etwa 2 bis 6 MB. Grundsätzlich ist die Menge, die Apache veröffentlicht, immer merklich geringer (um Megabytes) als die Menge, die es während der Anfrage zuweist, und nach ein paar Stunden verbraucht der httpd.exe-Prozess den gesamten verfügbaren RAM und der Server hängt.
Dieses Verhalten tut haupt nicht auf unserer Windows XP Entwicklung Boxen mit der gleichen Code-Basis auftreten und folgenden Konfigurationen:
- XP/Apache 2.2.11/PHP5.2.9-2/MySQL 5.1. 34
- XP/Apache 2.0.x (verschiedene) /PHP5.2.7/MySQL 5.0.67
Einfache PHP-Skripte auf dem Produktionsserver (Win2k3) scheinen nicht zu lecken zB:
- Basis PHP echo Funktionen
- Erstellen und Referenzierung Klassen
- Ausgabepufferung
- PDO mit und ohne persistente Verbindungen
Wenn unsere volle App ausgeführt wird, jedoch beginnen die Dinge zu lecken. Die einzigen Dinge, die wir uns vorstellen können, wären Objekte, Sitzungsdetails, globale Variablen - aber wie kann ich herausfinden, was das Leck ist? Und was verursacht es? Ohne die einzige Maschine zu stören, können wir das Problem duplizieren?
Hmm. Wir machen niemals explizite Unscharfschaltung oder verwenden __zerstören. Unsere Skripte selbst verwenden ungefähr ~ 8MB nach einem Aufruf von memory_get_usage() kurz vor dem Ende der Ausführung. Wir gingen davon aus, dass Apache in der Lage sein würde, den Speicher von dieser bestimmten Anforderung wiederherzustellen. Ich nehme an, dass es nicht sicher ist, das dann anzunehmen? – spronkey