2011-06-08 95 views
7

這是我的web應用程序的堆棧。簡單的nginx + php-fpm + php5.3 + mysql + memcache。最近我們部署了一些重構代碼。其中涉及SQL重構和緩存調整。我們發現在部署之後,服務器負載急劇增長。內存使用率攀升更加明顯。從頂層命令來看,許多php-fpm進程使用的是比以前更多的內存。所以是的,在部署的代碼中有什麼問題。這個問題只發生在生產環境中,在測試& dev envs都很好,所以它與流量有關。php高內存問題

我的問題一般是如何找出哪些請求(腳本)或我的代碼的哪些部分消耗太多內存?什麼是最容易找到的方法?

非常感謝。

+0

運行分析器可以給你需要長時間的腳本的想法運行 – 2011-06-08 09:55:33

+1

其實我使用xdebug作爲分析器,但是我沒有看到關於內存使用情況的很多信息。 – Shawn 2011-06-08 09:58:10

+1

螢火蟲也有幫助,我有一個很好的文章http://devzone.zend.com/article/2899 – 2011-06-08 10:01:18

回答

1

創建一個包含文件記錄的內存使用情況當程序退出時,然後使用自動預先映射。如果這是Apache的,那麼它會是安全的寫這個標準錯誤,它會出現在error_log中 - 不知道這是否與nginx的:

<?php 
function logit() 
{ 
    $line = $_SERVER['REQUEST_URI'] 
     . ' ' . memory_get_peak_usage(true); 
    // if stderr works... 
    $stderr = fopen('php://stderr', 'w'); 
    fputs(stderr, date('r') . ' ' . $line); 
    fclose($stderr); 
    // alternatively 
    openlog("php_memory", LOG_PID | LOG_PERROR, LOG_LOCAL0); 
    syslog(LOG_INFO, $line); 
    closelog(); 
} 
register_shutdown_function('logit'); 
1

我們使用XHProf進行內存分析。這並不完美,但你對發生的事情有很好的理解。如果你正在運行它,曾多次(這是你需要做什麼才能找到扣球reqeust)我還建議使用以下GUI:XHPROF GUI

問候