現代網站與網頁應用程式對於效能與資源管理的要求日益提高,PHP內存不足錯誤卻常常讓開發者與管理員感到困擾。遇到「Allowed memory size exhausted」等錯誤訊息時,代表伺服器分配給PHP的記憶體已經用盡,這不僅影響網站速度,還可能導致系統崩潰。本篇文章將帶你全面了解PHP內存不足的成因、如何有效調整php.ini與wp-config.php中的memory_limit值,以及進階伺服器配置優化策略。讀完後,你將學會分析問題來源、採用正確的設定方式,並能針對不同平台(如WordPress)進行最佳化,提升網站的穩定性與效能。
文章目錄
Toggle認識PHP內存不足錯誤的成因與影響
在PHP執行過程中,若所需記憶體超過系統允許的上限,就會出現內存不足的錯誤。這通常以「Fatal error: Allowed memory size of X bytes exhausted」為訊號,導致網頁無法正常載入。
常見錯誤訊息解析
- Allowed memory size of 134217728 bytes exhausted (tried to allocate 123456 bytes)
- PHP Fatal error: Out of memory
- 500 Internal Server Error(間接與PHP記憶體溢出有關)
內存不足的常見成因
- 網站流量突然增高,請求數量暴增
- PHP腳本或外掛程式有記憶體洩漏問題
- 處理大量圖片、檔案或複雜資料運算
- 伺服器預設memory_limit值過低
- WordPress或其它CMS插件未最佳化
內存不足對網站的影響
- 頁面載入失敗或錯誤訊息曝光,造成用戶體驗不佳
- 資料處理中斷,可能導致資料遺失或不一致
- SEO排名下滑,因為搜尋引擎無法正常抓取內容
- 影響網站安全性,黑客可能利用資源瓶頸進行攻擊
深入了解memory_limit設定與PHP記憶體管理
PHP的memory_limit設定用於限制單一腳本可用的最大記憶體量。適當調整此值,能有效避免資源過度消耗,但過低則易引發內存不足錯誤。
memory_limit的預設值與建議值
| PHP版本 | 預設memory_limit | 建議值(一般網站) | 建議值(大流量/大型網站) |
|---|---|---|---|
| PHP 7.2+ | 128M | 256M | 512M 或更高 |
| PHP 8.x | 128M | 256M | 512M – 1024M |
memory_limit值如何影響PHP應用
- 值太低:易出現資源不足錯誤
- 值太高:可能導致伺服器資源被單一應用佔滿
- 依腳本複雜度調整:圖片處理、匯入匯出等功能需更高memory_limit
快速檢測與定位PHP內存不足問題
面對內存不足錯誤,首要步驟是正確定位問題來源。以下提供常用檢查方法與工具。
檢查PHP錯誤日誌
- 登入伺服器後台,找到php_error.log或error_log檔案。
- 搜尋關鍵字「memory」或「exhausted」以快速定位。
- 分析出現頻率與相關腳本位置。
使用phpinfo()檢查當前memory_limit
- 建立一個含有
<?php phpinfo(); ?>的PHP檔案。 - 於瀏覽器開啟,搜尋memory_limit項目。
- 確認實際生效的記憶體限制值。
常用檢測工具與外掛
- Xdebug:分析記憶體使用狀況(適用開發環境)
- WordPress Site Health(網站健康檢查工具)
- Server monitoring工具(如New Relic、Datadog)

修改php.ini提升PHP記憶體限制
調整php.ini是最直接且有效的方式來提升PHP記憶體上限。php.ini為PHP設定主檔,位於不同平台常見於/etc/php/7.x/apache2/、/etc/php/7.x/cli/或網站根目錄。
步驟一:找到正確的php.ini位置
- 執行
php --ini或於phpinfo()頁面查詢「Loaded Configuration File」欄位。 - 根據Web伺服器(如Apache、nginx)或CLI分別編輯對應檔案。
步驟二:修改memory_limit設定
- 以root或sudo權限打開php.ini檔案。
- 搜尋
memory_limit,將其值修改(如:memory_limit = 256M)。 - 保存檔案。
步驟三:重啟Web伺服器使設定生效
- Apache:
sudo systemctl restart apache2 - nginx + PHP-FPM:
sudo systemctl restart php7.x-fpm與sudo systemctl restart nginx

設定成功驗證方法
- 再次以phpinfo()確認memory_limit已變更
- 網站運作穩定、內存錯誤不再出現
WordPress專用:修改wp-config.php設定memory_limit
若無法直接修改php.ini,或使用虛擬主機受限時,可透過WordPress的wp-config.php檔案調整PHP記憶體限制。
操作步驟與注意事項
- 於網站根目錄找到
wp-config.php檔案。 - 以純文字編輯器開啟,在
/* That's all, stop editing! Happy publishing. */前加入下列程式:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
- WP_MEMORY_LIMIT:一般前台所用記憶體上限
- WP_MAX_MEMORY_LIMIT:後台(如匯入、圖片處理)可用最大記憶體
適用情境與限制
- 虛擬主機用戶常被限制無法直接改php.ini,建議以wp-config.php調整
- 若主機商有更嚴格的全域限制,wp-config.php設定可能被忽略
驗證設定是否生效
- 安裝Site Health外掛或查看phpinfo(),觀察memory_limit變化
進階伺服器配置優化技巧
除了單純調整memory_limit外,伺服器整體配置與資源最佳化亦能顯著減少PHP內存不足問題。以下提供幾項實用建議。
1. PHP-FPM或Apache的工作程序優化
- 根據流量與記憶體總量,調整MaxRequestWorkers(Apache)或pm.max_children(PHP-FPM)
- 避免同時過多程序搶佔記憶體導致崩潰
2. 啟用Opcode快取(如OPcache)
- 有效減少重複編譯PHP腳本所需的資源
- 大幅提升網站響應速度
3. 外掛或主題減量與最佳化
- 定期移除未使用的WordPress外掛與主題
- 選用資源消耗較低的擴充功能
4. 圖片與多媒體資源壓縮
- 使用圖像壓縮工具(如TinyPNG、Imagify)降低處理所需記憶體
5. 升級伺服器硬體或雲資源
- 流量成長或資料量增加時,適時升級RAM、CPU與儲存空間
- 雲主機可彈性調整資源,避免單點瓶頸
6. 定期監控與效能分析
- 透過監控工具(如New Relic、Datadog、htop)追蹤異常記憶體消耗
- 預防性調整,避免問題擴大
實戰案例分享與最佳化經驗
以下結合真實經驗,說明如何逐步解決PHP內存不足問題。
案例一:圖片批次處理導致內存耗盡
某電商網站在上傳大量商品圖片時頻繁出現「Allowed memory size exhausted」錯誤。經檢查,原本memory_limit僅為128M,且未啟用OPcache。經調整memory_limit至512M,啟用OPcache並優化圖片壓縮流程後,網站運作順暢,錯誤不再發生。
案例二:WordPress外掛引發記憶體洩漏
一個內容網站安裝了多款未經優化的外掛,導致後台操作緩慢且內存不足錯誤不斷。管理員移除問題外掛、調整wp-config.php中的WP_MEMORY_LIMIT至256M,並監控效能,問題獲得解決。
案例三:虛擬主機限制導致設定無效
部分虛擬主機即便調整wp-config.php,仍因主機商限制memory_limit無法提升。最終與客服協調,將主機方案升級,才成功解決問題。
常見問題與誤區解析
常見誤區
- 誤以為memory_limit越高越好,其實應根據實際需求調整
- 只改wp-config.php卻忽略主機全域限制,導致設定未生效
- 忽視外掛與主題的資源消耗,單純提升記憶體無法根本解決問題
提升效能的其它要點
- 定期更新PHP版本,享有更佳效能與安全性
- 善用CDN、快取等技術分散壓力
- 多站點主機需分別評估每個網站的資源需求
總結與最佳實踐建議
PHP內存不足錯誤是常見的伺服器管理難題,但只要掌握正確的分析方法、適當調整memory_limit並配合伺服器整體優化,就能大幅提升網站的穩定性與效能。建議:
- 根據實際需求調整memory_limit,並定期監控資源使用狀況
- 優先檢查外掛、主題與圖片等高資源消耗來源
- 善用php.ini或wp-config.php設定,搭配伺服器優化措施
- 遇到虛擬主機限制,及早與主機商協調或升級方案
- 持續學習與更新管理工具,確保網站長期穩定
若有更進階的效能優化需求,建議諮詢專業伺服器管理顧問或IT團隊,確保設定符合企業規模與發展需求。
常見問題 FAQ
- 1. memory_limit建議設多少才合適?
- 一般小型或中型網站建議256M,大型或高流量網站可調至512M或更高。不建議無限上調,應依實際需求與伺服器資源分配。
- 2. 修改wp-config.php後,為何memory_limit沒有變化?
- 可能是主機商有更嚴格的全域memory_limit設定,wp-config.php僅能在允許範圍內調整,建議聯繫主機商確認。
- 3. 調高memory_limit會有安全風險嗎?
- 若記憶體限制過高,單一腳本有機會占用過多資源,導致伺服器當機。建議搭配資源監控與最佳化措施,避免濫用。
- 4. 虛擬主機無法修改php.ini怎麼辦?
- 可嘗試於wp-config.php、.htaccess或user.ini調整,若仍無效則需升級主機方案或與主機商協調。
- 5. 怎麼判斷是外掛還是系統本身導致內存不足?
- 可逐一停用外掛、檢查錯誤日誌與使用監控工具分析記憶體消耗,找出問題來源。





