[解決]WordPressの管理画面が重すぎて死んだ時にやったこと
ある時から急に重くなったとは思っていたんですけどね。他にやることも溜まっていたので放っておいたのです。
しかし、ここ数日本当に重い。せっかくプラグインを整理して使用メモリ量の削減をしているのに一向に軽くならないのでなんとかしないとなと思ってやったこと。
サーバーのロードアベレージが異常に高い
アクセスはキャッシュで捌いているので、それほど影響は無いなと思っていたのですが、管理画面をいじり始めるととたんに重たくなります。
環境はNginx・php-fpmでリバースプロキシを使用しています。DBはMySQLです。
MySQLが重いんだろうなと最初は思っていたのです。my.cnfのパラメータをいじってメモリ配分に気を配ってみましたが変化がありません。これじゃないのかなと思いつつ、これ以上は分からないのでもうエイヤッと、WebサーバとDBサーバを分けてみました。
分けてみると分かったのですが、MySQLはそんなに負荷かかってないんですよね。ほぼキャッシュで捌いているのでそりゃそうだよなと思うわけですが、やってみると実際にMySQLが原因じゃないということが分かってよかったです。
ということで話をWebサーバ側に戻しましょう。
メモリをふんだんに使わせてみる
php-fpmをつかっているので
/etc/php-fpm.d/www.conf
にあるパラメータをいじっていきます。
pm = staticやらdinamicやらondemandやらと選択肢がありますので、そことmax_childrenの値とかをいじってみたり。
そもそものメモリリミットを大きくしてみたりしてたしか見てみるのですが、これも影響が無さそうに見えるんですよ。なんだろうこれは…と思って暫く放置してしまう程度にはここで詰みました。
管理画面が重いので、そこで発行されているクエリを見てみよう
Query Monitorというプラグインがあります。これをインストールしてログインしておくと、画面上でクエリリストが見えてきます。
画面の読み込みが終わるまで待ちましょう。すると…
14.52sて…
つらすぎるよ…と思ってクエリの中身を見てみると…
[code]UPDATE `wp_options`</span>
<span class="s2">SET `option_value` = 'a:17912:{i:1452663757;a:1:[/code]
という部分が異常に長い。もうね、ものすごく長い。本当に。
クエリの中身をじっくり見てみると、同じようなクエリが延々と続いている事に気付きます。なんだろうこれは…と思ってググってみましたら。
WordPress4.3で急にサイトが重くなったときの対処方法(php-fpm暴走)
こんなブログが見つかりました。4.3の時に何かがあったようです。とは言え、いまつかっているのは4.4.1(最新バージョン)です。最初はあんまり関係ないよなと思って違うことを調べてみたのですが結果から言うとこれっぽいです。
英語のサイトも見つかったので
Massive Additions to WP_Options Table (45 posts)
こんな感じで、optionsの中にあるcronの中身を消しちゃえよと。そんな事が書いてありました。
実際先ほどのクエリを見てみても、実際には必要のないupdateばかりだったのでさくっと消してしまいました。
*クエリ内部には、既に使っていないプラグインのアップデートクエリなんかも入っており、むしろ不要だったのです。
MySQLにログインして
[code]delete from options where option_name= "cron";[/code]
とやって消しちゃいました。
その結果
14.52s→2.28sに劇的に短縮されましたとさ。
ああよかった。ついでに、ロードアベレージもここの所ずっと高めだったのですが、心配せずに寝られる程度に下がりましたとさ。
4.3の時にはこの現象気付いてなかったのですが、その後もそのままクエリが放置され続けたっていうことなんだろうか…?