勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

WordPressサイトのロードアベレージが高い

   

あるWordPressサイトのロードアベレージが先月ぐらいまでは通常0.5前後でピーク時に2ほどだったのに、通常1.5前後でピーク時に3ほどまで上がっていた。また突発的に100以上になりサーバが停止する事もあった。以下に解決方法をメモ。

 

結論から書くとWordPress Popular Postsが原因

プラグインのWordPress Popular Postsが原因っぽい。プラグインを停止することでロードアベレージが落ち着いた。

経緯と対応した内容等は以下にメモ。尚、サーバスペックはメモリ2GBでCPUは仮想3コアになる。

 

WordPress4.8.2にアップグレードした時期あたりで重たくなった

時期的にはWordPressをアップグレードした時期あたりになる。他にも同じような症状が起こっていないか調べてみると以下記事が見つかった。

https://ja.wordpress.org/support/topic/wordpress-popular-posts%E3%81%AB%E3%82%88%E3%82%8B%E9%AB%98%E8%B2%A0%E8%8D%B7%E5%87%A6%E7%90%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

ただ、WordPress Popular Postsをアップグレードしても直らなかった。

 

PHPとMySQLの設定

サーバのロードアベレージは上がっているもののメモリは比較的余っており、スワップ領域も使われていなかった。なのでPHPとMySQLのメモリ使用量を増やしてみた。

しかしながらこれでも直らず。

 

iptablesの設定

そのサイトは一時期、海外から大量にアクセスを受けることがあり、その影響でサーバ停止するという事があった。なので今回もそのようなアクセスかもしれないとaccess_logを追ってみたものの、それらしいIPは見つからず。

 

MySQLでCopying to tmp table

をちょくちょく見ていると、ロードアベレージが高くなっている際は「Copying to tmp table」というステータスの項目があった。

インデックスが大きくなりすぎ、メモリからディスクにデータをコピーして処理しているといった内容らしい。なので、my.confに以下設定を追記してみた。

しかしながらこれも意味がなかった。

 

Copying to tmp tableになっているテーブルを見てみると

「wp_popularpostssummary」というテーブルの処理に時間がかかっているみたい。また、ロードアベレージが10を超えている時はこのテーブルで処理待ちが発生しているようだった。

ここで結論に戻るんだけど、WordPress Popular Postsというプラグインが原因っぽいという考えに至った。また、プラグインを停止すると症状が改善されたので、恐らくこれが原因だろう。

ただ、このプラグインは「人気記事を表示させる」といったもので、アナリティクスの直帰率にかなり影響が出そう。できれば代替のプラグインを入れたい。

 

Simple GA Rankingが良い

Googleアナリティクスのデータを用いるSimple GA Rankingというプラグインがサーバに優しいとの事。

Simple GA Ranking

http://simple-ga-ranking.org/ja/

WordPressダッシュボードからインストールし有効にした後、Google側でAPIの設定が必要。導入にあたっては以下記事が参考になった。

https://www.tam-tam.co.jp/tipsnote/cms/post11104.html

表示させるにあたってはPHPで記述するかショートコードを書く必要がある。ウィジェットで使いたかったのでショートコードを選択した。簡単には以下の通り。

またサムネイルを表示させる場合は以下をfunctions.phpに追記。

表示に関しては以下記事が参考になった。

https://moriawase.net/simple-ga-ranking-thumbnail

https://moriawase.net/simple-ga-ranking-exclude

 

その他

サーバ設定の問題だと思っていただけにプラグインが原因というのは意外だった。WordPressで作成しているサイトの場合はプラグインも意識する。

 - MySQL, WordPress, サーバー

  関連記事

msyql-image
MySQLで加算しつつNULL値は0にする

いくつかのコードに対して投票を行い、 その合計値をスコアとして出したい。 ただ、 ...

msyql-image
MySQLでランダムに取得

SELECT カラム名 FROM テーブル名 ORDER BY RAND() L ...

images
WordPressを4.8.2にして不具合

WordPressを4.8.2にすると記事の新規追加時にウィジウィグの挙動がおか ...

images
MySQL/Apacheの再起動

忘れないようにメモ。 ■MySQL service mysqld restart ...

images
cronの設定方法

cronを設定してみたので方法をメモ。 まずcronで動かすPHPを作成。 ■c ...

vps-hosting
SSHのセキュリティ設定

SSHのセキュリティ設定をする事があった。設定内容は指示を貰えたので作業自体は問 ...

images
contact form7で500エラー

WordPressプラグインのcontact form7で送信ボタンを押し、ロー ...

msyql-image
ランダム表示のページング

MySQLからデータを持ってくる際に、 ランダムな表示を行ってほしいと言われた。 ...

vps-hosting
VPSに無料SSLのLet's Encryptを導入

SSLといえば有料という認識だったが、無料のものも出てきているという話を聞いた。 ...

images
WordPressで閲覧者にテーマを変更させるプラグイン

「新規サイトを○○みたいなイメージでWordPressのテーマを見繕って欲しい」 ...