簡體   English   中英

在Apache httpd進程,基於PHP / Doctrine的應用程序中查找內存泄漏

[英]Locating memory leak in Apache httpd process, PHP/Doctrine-based application

我有一個使用這些組件的PHP應用程序:

  • Centos 5.4上的Apache 2.2.3-31
  • PHP 5.2.10
  • Xdebug 2.0.5啟用了遠程調試
  • APC 3.0.19
  • PHP 1.2.1的Doctrine ORM使用查詢緩存和通過APC的結果緩存
  • MySQL 5.0.77使用查詢緩存

我注意到,當我啟動Apache時,我最終得到了10個子進程。 隨着時間的推移,每個進程將在內存中增長,直到每個進程接近10%的可用內存,這開始使服務器慢慢爬行,因為它們一起增長占用了100%的內存。

這是我的最高輸出的快照:

 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 

我沒有長時間運行的腳本(它們最終終止,最長的可能是2分鍾),我的工作假設是每個腳本終止后,它使用的內存將被釋放。 (也許有人可以糾正我)。

我的預感是它可能是APC,因為它在請求之間存儲數據,但同時,它會將數據存儲在httpd進程中似乎很奇怪。

如何跟蹤我的應用程序的哪個部分導致內存泄漏?

我可以使用哪些工具來了解httpd進程內存使用量的增長情況以及有何貢獻?

我的預感是它可能是APC,因為它在請求之間存儲數據,但同時,它會將數據存儲在httpd進程中似乎很奇怪。

這有什么奇怪的? 這正是APC所做的。 但是,內存在所有httpd進程之間共享,所以它沒有聽起來那么糟糕。 請參閱APC在哪里存儲其操作碼和用戶變量緩存? 詳情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM