Auffinden von Speicher-Lecks in der Apache httpd-Prozess, PHP/Lehre-basierte Anwendung

Habe ich eine PHP-Anwendung mit folgenden Komponenten:

  • Apache 2.2.3-31 auf Centos 5.4
  • PHP 5.2.10
  • Xdebug 2.0.5 mit Remote-Debuggen aktiviert
  • APC 3.0.19
  • Doctrine ORM für PHP 1.2.1 mithilfe von Query Caching und Ergebnisse Caching über APC
  • MySQL 5.0.77 mithilfe von Query Caching

Habe ich bemerkt, dass wenn ich start-up, Apache, ich schließlich am Ende der 10 child-Prozesse. Wie die Zeit vergeht, jeder Prozess wachsen im Speicher, bis die einzelnen Ansätze 10% des verfügbaren Arbeitsspeichers, die beginnt, sich langsam der server auf ein Schneckentempo da Sie zusammen wachsen Sie zu bis zu 100% des Speichers.

Hier ist ein Schnappschuss von meiner top-Ausgabe:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1471 apache    16   0  626m 201m  18m S  0.0 10.2   1:11.02 httpd                                                                                                                                                          
 1470 apache    16   0  622m 198m  18m S  0.0 10.1   1:14.49 httpd                                                                                                                                                          
 1469 apache    16   0  619m 197m  18m S  0.0 10.0   1:11.98 httpd                                                                                                                                                          
 1462 apache    18   0  622m 197m  18m S  0.0 10.0   1:11.27 httpd                                                                                                                                                          
 1460 apache    15   0  622m 195m  18m S  0.0 10.0   1:12.73 httpd                                                                                                                                                          
 1459 apache    16   0  618m 191m  18m S  0.0  9.7   1:13.00 httpd                                                                                                                                                          
 1461 apache    18   0  616m 190m  18m S  0.0  9.7   1:14.09 httpd                                                                                                                                                          
 1468 apache    18   0  613m 190m  18m S  0.0  9.7   1:12.67 httpd                                                                                                                                                          
 7919 apache    18   0  116m  75m  15m S  0.0  3.8   0:19.86 httpd                                                                                                                                                          
 9486 apache    16   0 97.7m  56m  14m S  0.0  2.9   0:13.51 httpd 

Habe ich keine lange Skripts (Sie alle kündigen, schließlich, das längste vielleicht 2 Minuten lang), und ich arbeite unter der Annahme, dass einmal in jedem Skript beendet wird, wird der Speicher verwendet wird aufgehoben. (Vielleicht kann jemand mich korrigieren, auf dass).

Meine Vermutung ist, dass es sein könnte, APC, da es speichert Daten, die zwischen Anforderungen, aber zur gleichen Zeit, es scheint seltsam, dass es speichert die Daten in der httpd-Prozess.

Wie kann ich nachverfolgen, in welche ein Teil meiner app die Ursache des memory-leak?

Welche tools kann ich verwenden, um zu sehen, wie die Speicherauslastung ist wachsend in der httpd-Prozess und was trägt Sie?

InformationsquelleAutor Sam | 2010-06-01
Schreibe einen Kommentar