[解決]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というプラグインがあります。これをインストールしてログインしておくと、画面上でクエリリストが見えてきます。

画面の読み込みが終わるまで待ちましょう。すると…

[peg-image src="http://lh3.googleusercontent.com/-I2jvuQQnUCs/VqSvHwgRYfI/AAAAAAACfp0/CZbkfCZQ3YE/s144-o/qm1.jpeg" href="https://picasaweb.google.com/117388002231020458927/20160124?authkey=MmW5lNemrC8#6243307531256553970" caption="qm1.jpeg" type="image" alt="qm1.jpeg" image_size="369x77" ]

14.52sて…

つらすぎるよ…と思ってクエリの中身を見てみると…

UPDATE `wp_options`</span>

<span class="s2">SET `option_value` = 'a:17912:{i:1452663757;a:1:

 

という部分が異常に長い。もうね、ものすごく長い。本当に。

[peg-image src="http://lh3.googleusercontent.com/-Bdz8N8ttMPU/VqSvQj9EtYI/AAAAAAACfp8/oSCgsvJ8iEA/s144-o/qm2.jpeg" href="https://picasaweb.google.com/117388002231020458927/20160124?authkey=MmW5lNemrC8#6243307682506519938" caption="qm2.jpeg" type="image" alt="qm2.jpeg" image_size="1224x356" ]

クエリの中身をじっくり見てみると、同じようなクエリが延々と続いている事に気付きます。なんだろうこれは…と思ってググってみましたら。

WordPress4.3で急にサイトが重くなったときの対処方法(php-fpm暴走)

こんなブログが見つかりました。4.3の時に何かがあったようです。とは言え、いまつかっているのは4.4.1(最新バージョン)です。最初はあんまり関係ないよなと思って違うことを調べてみたのですが結果から言うとこれっぽいです。

英語のサイトも見つかったので

Massive Additions to WP_Options Table (45 posts)

[peg-image src="http://lh3.googleusercontent.com/-rw3we9XUGdA/VqSwjosGj4I/AAAAAAACfqI/JJHApFbdZlE/s144-o/remove.jpeg" href="https://picasaweb.google.com/117388002231020458927/20160124?authkey=MmW5lNemrC8#6243309109706657666" caption="remove.jpeg" type="image" alt="remove.jpeg" image_size="764x244" ]

こんな感じで、optionsの中にあるcronの中身を消しちゃえよと。そんな事が書いてありました。

実際先ほどのクエリを見てみても、実際には必要のないupdateばかりだったのでさくっと消してしまいました。

*クエリ内部には、既に使っていないプラグインのアップデートクエリなんかも入っており、むしろ不要だったのです。

MySQLにログインして

delete from options where option_name= "cron";

とやって消しちゃいました。

その結果

14.52s→2.28sに劇的に短縮されましたとさ。

[peg-image src="http://lh3.googleusercontent.com/-C-xWHvs-KFk/VqSxCQWUb4I/AAAAAAACfqU/AFCG_wdkst4/s144-o/query3.jpeg" href="https://picasaweb.google.com/117388002231020458927/20160124?authkey=MmW5lNemrC8#6243309635748786050" caption="query3.jpeg" type="image" alt="query3.jpeg" image_size="324x76" ]

ああよかった。ついでに、ロードアベレージもここの所ずっと高めだったのですが、心配せずに寝られる程度に下がりましたとさ。

4.3の時にはこの現象気付いてなかったのですが、その後もそのままクエリが放置され続けたっていうことなんだろうか…?

オススメNginx本

nginx実践入門 (WEB+DB PRESS plus) 単行本(ソフトカバー) – 2016/1/16

nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

 - Wordpress