這裡介紹如何增加伺服器的 PHP 記憶體上限值,解決 WordPress 因記憶體不足而出錯的問題。
自己架設 WordPress 網站時,如果外掛程式安裝的比較多(或是裝了設計不良的外掛程式),就有可能因為記憶體用量超過預設的上限值,造成 PHP 的執行錯誤。
Allowed memory size
與 exhausted
,例如:
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
設定檔會影響伺服器上所有網站的設定值,如果只要調整單一網站的設定,就不能用這樣的方式。
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