首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP「Allowed memory size exhausted」內存耗盡錯誤的 3 種解決方案

     編輯:PHP 綜合知識

錯誤:Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 76 bytes)。默認 memory_limit = 8M (PHP 5.2) 或 128M (PHP 5.3+),處理大圖片、大文件、遞歸、大數組時易觸發。

方案一:腳本內動態調整(臨時、靈活)

ini_set('memory_limit', '256M'); // 根據需要設置,-1 為無限制(慎用)
  • 僅影響當前腳本,不改動全局配置。
  • 必須在內存密集操作**之前**調用。

方案二:修改 php.ini(全局永久)

; php.ini
memory_limit = 256M  ; 建議 128M-512M,視服務器內存而定
; 生效需重啟 Apache/PHP-FPM
  • 影響所有 PHP 腳本。
  • 共享主機通常無權修改。

方案三:.htaccess 分布式配置(目錄級)

# .htaccess (需 AllowOverride Options 或 All)
php_value memory_limit 256M
  • 僅影響該目錄及子目錄腳本。
  • 需 Apache 啟用 AllowOverride 支持 php_value。

根因排查與最佳實踐(治本)

  1. 優化算法: 大文件流式處理(fgets、yield 生成器)、分批處理數據庫結果(LIMIT offset, count)、避免一次性載入巨大數組。
  2. 釋放變量: 及時 unset($bigVar)、$bigVar = null 釋放引用計數。
  3. 圖片處理: 用 Imagick 替代 GD(內存效率更高)、縮圖後銷毀源資源。
  4. 監控告警: 生產環境監控 memory_get_peak_usage(),超過閾值報警。

設置建議

環境建議值說明
開發/測試256M - 512M方便調試大數據
生產 Web128M - 256M防止單腳本佔盡內存導致 OOM Killer
CLI 長任務512M - 1G 或 -1視數據量而定,配合生成器分批
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved