2011-10-04 23 views
2

我有2個服務器:我的本地服務器和遠程生產服務器。他們有基本相同的配置:Ubuntu 10.10,Apache 2,PHP 5.3,PHP-APC,MYsql等。我也有兩個服務器上的Web應用程序的副本,這裏是PHP的問題:PHP生產服務器上的內存尖峯

在我的本地服務器webapp僅使用〜4 MB的內存,但在我的生產服務器上,內存使用率高達50 MB,沒有理由。我試圖運行memory_get_peak_usage()函數來獲取webapp執行的不同階段的內存使用情況,我發現在生產服務器上,內存使用類似於class_exists()的函數調用時,內存峯值從0.7到49 MB。

可能是什麼問題?

坦克。

+0

你確定這是導致內存消耗瘋狂的函數調用嗎?嘗試將同一行放入單個PHP文件並進行驗證。 – soulmerge

+0

現在我不能這樣做,因爲它正在運行,但我會盡快嘗試。我確實試着用這個函數註釋掉內存,內存使用量降到了正常的數量。總體而言,它保持在同一水平,因爲還有一些其他地方使用了相似的功能。 –

+0

好的,我試圖在它自己上運行class_exists(),它並沒有像在web應用程序中那樣佔用更多的內存。爲什麼......不知道。 –

回答

0

好,我已經找到在那裏有一個問題。有一個類正在創建包含用戶瀏覽器信息的緩存文件(以便稍後識別它們)。顯然,該文件和/或解析器出現問題,因此它使用的內存太多。從那時起我已經清除了緩存文件,如果情況會重複,我會完全拋棄這個類。

感謝所有回答/評論問題的人。

0

討厭聽起來不爽,但你有沒有證實他們有完全相同的Apache/PHP配置,因爲他們可以很容易地成爲這些差異的來源.. 他們也經歷了同樣的負載,在負載下的服務器上運行的代碼可能與使用充足的無爭議資源運行代碼的行爲非常不同。

其他正在運行的應用程序可能會影響到其他任何差異嗎?

也許值得分析兩個服務器上的代碼,看看是否有任何每個請求的差異,XHprof [1]是一個很好的工具,它可以安全地在生產中運行(只要你閱讀指令)

[1] http://phpadvent.org/2010/profiling-with-xhgui-by-paul-reinheimer

+0

我剛剛檢查了本地和遠程服務器的配置,它們幾乎完全相同(有些不同,但它們不應該影響內存)。 本地服務器幾乎沒有任何負載,另一方面生產相當繁忙。 感謝您的鏈接,我會盡快使用XHprof [1]。 –

+0

謝謝,我已經處理了這個問題 - 與文件解析有關。我會盡快發佈答案。 –