ロリポップでこんなトラブルに遭遇しました。
- ブログをWordPressで動かしている
- プラグインもそこまで多く入れてない
- なのにPHP側でメモリ不足が発生…(困)
このPHPメモリ不足の原因と解決策。
ロリポップで修正する方法を解説します。
※ WordPressに限らずPHP全般でも有効
目次
「サイトに重大なエラー」が発生しまくる
私自身のブログで発生した事件ではありません。
ある方からトラブル依頼を受けていました。
管理画面で何かしらの操作したとき、
↓ 以下のエラーが頻発していたそうです。
サイトに重大なエラーがありました。
WordPressでのデバッグをさらに詳しく見る
↓ 次の操作をすると確率的にエラーになる
- 管理画面のいずれかのページを開く、
- 投稿記事の編集ページだったり、
- メディア一覧ページだったり、
- コメントの管理ページだったり、
とにかく管理画面でエラーが発生してます。
厄介なのは必ず発生するのではなく、
数回に1回の頻度でランダムに起こることです。
原因はロリポップのPHPメモリ不足と判明
それで原因を色々調べることにしました。
調査していくと、↓こんなエラーが出てたと判明します。
Backend fatal error: PHP Fatal error: Allowed memory size of bytes exhausted (tried to allocate 40960 bytes) in /home/hogehoge/public_html/wp-includes/option.php on line 281
この「Allowed memory size of 134217728 bytes exhausted」というのは「メモリ足りない。メモリ不足」という意味です。具体的には134MBのメモリを消費してました。
最初はプラグインが原因かなと思ったんですよね。
でも結局はロリポップのメモリ設定に問題がありました。
WordPressが必要とするメモリ量が少なすぎたんです。
メモリをWP_MAX_MEMORY_LIMITで拡張したが…
WordPressでは、以下フラグでメモリ上限を変えれます。
WP_MAX_MEMORY_LIMIT
WP_MEMORY_LIMIT option allows you to specify the maximum amount of memory that can be consumed by PHP. This setting may be necessary in the event you receive a message such as “Allowed memory size of xxxxxx bytes exhausted”.
引用元 : https://developer.wordpress.org/apis/wp-config-php/#increasing-memory-allocated-to-php
これに必要なメモリ容量を代入するだけです。
具体的にはWordPressのwp-config.phpを開き、
最後あたりにメモリ容量を増やすコードを追加します。
↓ 具体的なwp-config.phpのコード修正例
/* メモリ上限の拡張 */
define('WP_MAX_MEMORY_LIMIT', '512M');
/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
/** Absolute path to the WordPress directory. */
if (!defined('ABSPATH')) {
define('ABSPATH', dirname(__FILE__) . '/');
}
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
このように /* 編集が必要なのはここまでです...*/
の前に記述します。この例ではWP_MAX_MEMORY_LIMITに対して512M = 512メガバイトを割り当てました。
ところがPHPメモリ不足は解決せず・・・
別な方法を探すことにしました。
サーバーの.htaccessでPHPメモリ上限を変更
根本的な解決策は.htaccessで上限設定することです。
ロリポップでは以下の方法で上手く行きました。
1.php_value,php_flagを有効にする
初めにphp.iniでphp_value, php_flagを有効にします。
↓ メニューから「PHP設定」を開く
↓ 対象サイトの「php.ini」⇒「設定」をクリック
↓ 開いたら一番下の項目をOnにする(画像参照)
このようにphp_value, php_flagを利用可能にします。
そうすると.htaccessの設定が優先されます。
2.php_value memory_limit からメモリ上限変更
そしたら.htaccessを編集していきます。
↓ ロリポップFTPを開く
↓ .htaccessの最後に以下の命令を追加
## メモリ上限を512MBに拡張
php_value memory_limit 512M
↓ 具体的にはWordPress設定の後に書く
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
## メモリ上限を512MBに拡張
php_value memory_limit 512M
ここでは512MBまでメモリ上限を拡張してます。
その値は必要に応じて変更すればOKです。
これで.htaccessを保存してください。
PHPのメモリ上限が反映されたか確認
PHP側でメモリ上限の反映を確認します。
↓ .htaccessと同じフォルダにtest.phpを作成
<?php
echo ini_get('memory_limit');
↓ そのtest.phpにブラウザからアクセス
上記のように.htaccessにて設定した php_value memory_limit の値が表示されれば成功です!あとはWordPressでメモリ不足が解決されたか確認してください。
もしメモリ不足が解決しないなら…
さらにPHPのメモリ上限を増やしてみてください。
トラブル解決にお困りならご相談を…
今回みたいなトラブルを解決したい、
でも技術的な知識がなくてトホーに暮れている…
そういう人の為にトラブル解決相談もやってます。
↓ ココナラで次のサービス運営中
お困りなら何でもご相談ください。
基本的にいつでも作業代行できます。
フク郎
最新記事 by フク郎 (全て見る)
- トレンドブログが資産に?放置でアクセス急増の事例 - 3月 14, 2024