2013-02-07 127 views
0

我們有一箇舊的Facebook應用程序,運行流暢寫在本地PHP。Php高內存使用率

本月我們決定在zend-framework 2中重寫它。昨天,在切換到新的應用程序後,它崩潰了我們的服務器,出現了很多內存不足錯誤。所以我們回到了舊的應用程序。

我安裝了xdebug來剖析應用程序。使用memory_get_peak_usage()函數我注意到高內存使用率。

在舊的應用程序中,靜態頁面僅使用1 MB內存。但新的約7-8 MB在同一頁上。

這裏從webgrind的頂部兩行:

Function          Invocation Count Total Self Cost Total Inclusive Cost 
    Composer\Autoload\ClassLoader->loadClass  224     23.31  47.20 
    Composer\Autoload\ClassLoader->findFile  224     9.57  10.23 

也試過塔Apache的AB工具

ab -n 50 -c 5 -C PHPSESSID=SESSIONID http://myhost.com 

結果是:

Percentage of the requests served within a certain time (ms) 
    50% 368 
    66% 506 
    75% 601 
    80% 666 
    90% 1073 
    95% 1812 
    98% 2278 
    99% 2278 
    100% 2278 (longest request) 

所有這些從生產服務器不結果本地主機。

7-8 mb是否爲單頁正常?如果不是,我該如何減少它?我應該在zf2還是作曲家中尋找它?

如果需要,我可以提供代碼示例。謝謝。

+0

步驟通過與調試器的應用程序。在這些速率下,應該很明顯的是,連續100次被稱爲/實例化的原因並不存在。 –

回答

0

我花了一天的時間找出問題。試過xdebug,xhprof。代碼中沒有問題。

我們切換回2.0.0並解決問題。我不知道新版本有什麼問題,現在堅持使用2.0.0。

整體內存使用量約爲4MB,沒有崩潰。

composer.json:

"zendframework/zendframework": "2.0.0", 
2

當您將解決方案從本機遷移到Zend時,您必須瞭解Zend的工作方式。

Zend由許多類組成,當使用Objects而不是native/light結構時,使用的內存會增加。

爲了提高內存的使用,檢查你的代碼並執行以下操作:

  • 包裹函數一些代碼,它有助於垃圾收集器從內存中刪除未使用的對象。
  • 在打印數組之前,不要在數組中存儲大量的對象列表,而是要即時打印。
  • 限制在循環中創建對象(調用'new')。

跳這有助於。