2012-10-25 96 views
1

我已經在php.ini中將我的PHP MAMP服務器設置爲最大「256M」,但突然出現內存錯誤。有兩件事對此很奇怪:內存泄漏故障排除

  1. 這是一個令人震驚的大量內存供腳本使用。也許我太容易感到震驚,但腳本應該超過256M?我不會這麼想的。
  2. 儘管我現在將設置更改爲「512M」,但仍然出現內存錯誤,並且它仍然報告在256M範圍內/附近運行(就好像我的設置被忽略)。我確實回收了我認爲足以啓動新設置的Web服務器。

我得到的確切消息是:

[25-Oct-2012 14:27:53] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 222300161 bytes) in [FILE_PATH]/wp-content/themes/lifegadget-pagelines/sections/lg_content/section.php on line 42 
[25-Oct-2012 14:27:53] PHP Fatal error: Call to a member function get() on a non-object in [FILE_PATH]/wp-content/object-cache.php on line 52 

所以我的問題如下:

  1. 故障排除。有什麼方法可以解決內存使用問題嗎?
  2. 比例尺。超過256M限制是一個明顯的問題,或者在某些情況下這是合理的嗎?
  3. 新天花板。爲什麼我的512M新天花板被忽略?並不是說我很樂意讓它保持在512M,但我原以爲它至少可以讓我恢復正常運行(機器上有16GB的存儲空間,因此有足夠的物理內存)。
+0

你的第一個問題的簡短答案是:(http://stackoverflow.com/questions/849549/finding-cause-of-memory-leaks-in-large-php-stacks。很難回答你的第二個問題沒有上下文的問題,但總有一個適當的情況,更多的內存是可以接受的解決方案(反過來也是如此) –

+1

完全取決於你的腳本試圖做什麼,如果一個簡單的'echo 1 + 1'腳本會很震撼用完了256meg。如果沒有使用數兆字節的內存,將GDGA像素圖像加載到GD中進行處理的腳本會令人震驚。 –

+1

在各個地方使用[memory_get_usage](http://php.net/memory_get_usage)在腳本中可能會使用更多的內存),並直接「回顯」網頁上的值或將它們記錄到文件中。腳本在做什麼?是否可能發佈酸ce代碼?或者,也許它的一個相關部分? – Jocelyn

回答

0

無限循環可能會導致這種情況,或者如果您有循環引用與5.3 PHP版本。請參閱:Garbage collection

0

在懷疑內存泄漏的類/頁面的最開始處注入此函數ini_set('memory_limit', -1);,這是使事情正常工作的臨時解決方案,但它無法幫助您知道腳本正在泄漏內存的位置。