質問: 自社ECで販売している、女性向けの下着や水着、 セクシーコスチューム等の画像サイトを WordPressで運営しています。 1つの投稿に、テーマごとに20~30枚程度の画像と 私たち女性スタッフの着用レビューなどが掲載されています。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/cc22bdad6f92e0a2f678d21f987fbb1d.jpeg) 最初はとても快適に閲覧できていたのですが、 1日1万PVを過ぎたあたりから、表示に10秒くらいかかるようになり、 2万PVを超えた現在は、完全表示まで20秒以上かかります。 また、休日夜間のピーク時には、 InternalServerError500が出たままになり VPSを再起動するまで動かなくなる事もしばしばです。 この時はPleskの管理画面にも入れず、 VPSの管理画面からサーバー再起動しています。 そこで、サーバーの負荷対策をしなきゃ! という話になったのですが、 無料サーバー監視ツールのグラフを見ると、私のような素人目には、 そんなに高負荷ではないのに遅くなるようにも見えるので、 正直、原因が全くわからない状況です。 また、「CDN」や「VPSのメモリ増強」など、 キーワードとその概要は調べられても、 社内にインフラ技術者が全くいないため、 実際に効果が期待できるのか、判断しかねています。 目標としては、「サクサク」まではいかなくていいので、 10秒以内程度でページが表示されれば十分です。 何より夜間に500エラーで表示されなくなる症状を防ぎたいです。 インフラに詳しい方に、低予算から試せそうな オススメ負荷対策をアドバイスを頂けないでしょうか? また、参考になるブログや、調査・対策を安価にやってくださる 業者さんの紹介など、何でも構いません。 どうかよろしくお願いします。 ■現在の運用状況 ・GMOクラウドの、VPS4GB(メモリ4G、仮想CPU4コア)+Plesk12です。 ・上記VPSに、WordPress用と、画像用のドメインを分けてアップロードしています →→ http://sample.com (WP用ドメイン) →→ http://img-sample.com (画像用ドメイン) ・PleskでnginxをONにしています ・画像はJPEGmini等で極力小さくしています。90~200kB程度 ・WP側にはキャッシュプラグインとして、「WP Fastest Cache」の 有料版を入れ、PC用・スマホ用のキャッシュを生成しています。 ・アクセスの6割がスマホです ■負荷状況 ・CPU使用率 普段は5%~20%を行き来しています。 過去2か月で20回以上、使用率100%で警告が出ています。 ・ディスク使用量 10%くらい ・空きメモリ容量 70%くらい ・ロードアベレージ 普段は1.4~1.7くらいですが 過去3カ月で7を超える警告が10回程度発生しています。 ■その他の制限 無料で使えるCDNとしてCloudFrareを試そうとしたのですが、 扱っている商品画像には、かなりきわどいコスチュームや モデルさんによる着用プレイイメージ画像などもあるため、 問い合わせてみたところNGと言われました。 そのため、CDNを使うなら他社になるのかと思います。 VPSも同じ理由でGMOクラウドになりました。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/83e219f5309cadca1d7efbd1eb5fb58d.gif) ■HTTPアクセス不能になったときの状況 ・1/12日 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/162be2c41ade9b4a5dc135d5c11c4f04.gif) ・1/16日 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/97e0ce1c81d70d62487e5c44f7f3d5bb.gif) ■メモリの設定 ・WordPress側のwp-configに下記の指定はありませんでした。 define('WP_MEMORY_LIMIT', '★★M'); ・php.ini側の設定は下記です ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/c2838c339a16d7383c0b23d3b1d414bb.gif) ■PHPバージョン(phpinfoで取得) PHP Version 5.3.3 ■>>mysql --versionコマンドで取得 mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1 ■その他MySQLの情報(mysqladminコマンドで確認) mysqladmin Ver 8.42 Distrib 5.1.73, for redhat-linux-gnu on x86_64 Server version 5.1.73 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/lib/mysql/mysql.sock Uptime: 1 day 3 hours 32 min 58 sec Threads: 2 Questions: 5190098 Slow queries: 324 Opens: 39682 Flush tables: 1 Open tables: 64 Queries per second avg: 52.331 ■php -mの結果 [PHP Modules] bz2 calendar Core ctype curl date dom ereg exif fileinfo filter ftp gd gettext gmp hash iconv imap ionCube Loader json libxml mbstring mysql mysqli openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar readline Reflection session shmop SimpleXML sockets SPL sqlite3 standard tokenizer wddx xml xmlreader xmlwriter xsl zip zlib [Zend Modules] the ionCube PHP Loader ■遅延の直前直後詳細 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/94315a87d532d7ba74fb6958f4c19b13.gif)
回答: ぱっと見メモリはあんまり変化していないのでCPU(処理系)が怪しいんじゃないかなと思います。(※非効率な処理などが多いなど) Queries per second avgがちょっと大きすぎるので あんまり良くないクエリになっているか無駄に大量に発行しているんじゃないかなーとも。(使っているプラグインによってもこのあたりは大きく変わります) SSHで接続し、topやsarコマンドでプロセスをモニタリングしてみてください。 CPU使用率が高いプロセスが見つかるのではないでしょうか。 あと、前触れなく落ちている感もあるので、落ちる直前のアクセスログも調べてみてください(これは提示していただかなくても大丈夫です。) 妙に多いアクセスがあったりすればそれもチェックしてみてもいいかなと。 不正アクセスのさばき方に問題があってアクセス過多でタイムアウト、みたいなこともWordPressを使用している方には少なくないので。 とはいえ、内部処理を見直すのは順当とはいえ 時間もコストもかかるので、場合によっては ・サーバースペックを上げる ・Kosuke_Shibuyaさんのおっしゃっているように処理効率の高いverを使用する などのほうが安価で早い場合が多いというのも実情ではありますが。