這裡介紹如何增加伺服器的 PHP 記憶體上限值,解決 WordPress 因記憶體不足而出錯的問題。

自己架設 WordPress 網站時,如果外掛程式安裝的比較多(或是裝了設計不良的外掛程式),就有可能因為記憶體用量超過預設的上限值,造成 PHP 的執行錯誤。


因記憶體用量太高所產生的錯誤訊息可能會有好多種,其中的關鍵字就是 Allowed memory sizeexhausted,例如:

2017/12/21 09:29:31 [error] 26372#26372: *4023 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 67108864 bytes exhausted (tried to allocate 88 bytes) in /var/www/blog.gtwang.org/wp-includes/wp-db.php on line 2523" while reading response header from upstream, client: X.X.X.X, server: blog.gtwang.org, request: "POST /wp-admin/admin-ajax.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "blog.gtwang.org", referrer: "https://blog.gtwang.org/wp-admin/index.php"

至於會從哪一個 PHP 檔產生這樣的錯誤則不一定,而解決的方式有好幾種,請從以下幾種方式中挑選適合的。

系統 php.ini 設定檔

若遇到這樣的錯誤,典型的解決方式就是修改系統 php.ini 設定檔,提高 memory_limit 設定值:

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M

memory_limit 所設定的值代表 PHP 程式在執行時,所能使用的記憶體上限值,通常會出現記憶體不足的情況,就是因為這個值設太低了,稍微調高一點就可以解決。

再調整 memory_limit 的設定值時,也要注意不可以把這個值一下調太高,萬一這個值調的太高,又遇到設計不良的 PHP 程式碼,把整個系統的記憶體吃光,就會影響到整個系統的效能,後果更嚴重。

由於 php.ini 這個設定檔是屬於系統的設定檔,如果您只是網站的設計者,不是系統管理員,就可能沒辦法直接修改這個檔案,這時候就要改用其他的方式。

另外修改 php.ini 設定檔會影響伺服器上所有網站的設定值,如果只要調整單一網站的設定,就不能用這樣的方式。

WordPress wp-config.php 設定檔

除了修改 php.ini 設定檔之外,我們也可以從 WordPress 的設定檔來修改,請在 wp-config.php 設定檔中的 stop editing 那一行註解之前,加上以下設定:

// 正常網頁的記憶體用量上限值
define( 'WP_MEMORY_LIMIT', '128M' );

// 管理介面的記憶體用量上限值
define( 'WP_MAX_MEMORY_LIMIT', '256M' );

/* That's all, stop editing! Happy blogging. */

因為 WordPress 的管理介面通常會使用到比較多的記憶體,所以 WordPress 提供兩個設定值給網站管理者調整,WP_MEMORY_LIMIT 是設定正常網頁的記憶體用量上限值,而 WP_MAX_MEMORY_LIMIT 則是設定管理介面的記憶體用量上限值,通常 WP_MAX_MEMORY_LIMIT 會設高一些。

雖然 WP_MEMORY_LIMIT 是針對正常網頁的設定,但我發現有時候也會影響管理介面的某些功能,所以在調整時,可以兩個值都嘗試看看。

參考資料:wpbeginner