Apache-2.2

致命錯誤:記憶體不足(已分配…)(試圖分配…字節)不是由於 memory_limit 設置

  • November 5, 2013

幾天后,我在伺服器上收到以下錯誤:

Fatal error: Out of memory (allocated 262144) (tried to allocate 393216 bytes)

通常這個錯誤是由於記憶體消耗超過了配置的 memory_limit,但在我的情況下沒有關係。memory_limit設置為128MB,在這種情況下,我們甚至沒有達到 1MB 。

另外伺服器的負載也不大,實際上是一個內網伺服器,連接的人很少。

系統:Windows Server 2003,1Go RAM,僅使用了 600 MB。阿帕奇 2.2.4 PHP 5.2.3

此錯誤隨機出現。達到的記憶體限制也是隨機的,介於幾 kB 到幾 MB 之間。有時需要重新啟動 Apache 才能消除錯誤,有時它會自行消失。

重新啟動 Apache 或整個伺服器暫時有幫助。

這個問題可能來自哪裡?我怎樣才能縮小錯誤來源?

後來我在 SO Random “PHP Fatal error: Out of memory” 錯誤和更完整的 Fatal error: Out of memory, but I do have enough memory (PHP)上發現了同樣的問題。

此問題是由於物理記憶體限製造成的。如何遇到這種情況有多種可能性,因為其他程序佔用了所有記憶體,Apache/PHP 中的記憶體洩漏。

此外,它是每個請求(如果我錯了,有人糾正我),因此可以跨過硬限制並出錯,特別是在它在一堆處理的共享記憶體的伺服器上。

你可以製作一個 phpinfo.php 文件

<?php

// Show all information, defaults to INFO_ALL
phpinfo();

?>

在其中顯示正在使用的實際設置。並可能使用 PHPTop

向您顯示正在執行的可能屬性的任務查詢。(有時POST到SQL會繞過記憶體限制,如果它們在大小上被錯誤判斷或在呼叫後增長。)

引用自:https://serverfault.com/questions/550159