Apache-2.2
致命錯誤:記憶體不足(已分配…)(試圖分配…字節)不是由於 memory_limit 設置
幾天后,我在伺服器上收到以下錯誤:
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會繞過記憶體限制,如果它們在大小上被錯誤判斷或在呼叫後增長。)