質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • WordPress

    7160questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • Linux

    3756questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • VPS

    345questions

    VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

  • CDN

    17questions

    CDNは、Webコンテンツをインターネット経由で配信するのに最適化されたネットワークを指します。Webサイトにある静的コンテンツをWebサイトが管理されているサーバーとは異なるサーバーにキャッシュし代わりに配信することで、負荷が分散し速度を向上する仕組みです。

  • 負荷分散

    14questions

    負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

画像が多いWordPressサイトの、サーバー過負荷対策を教えて下さい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 6
  • VIEW 1,834

maifukuhara

score 72

自社ECで販売している、女性向けの下着や水着、
セクシーコスチューム等の画像サイトを
WordPressで運営しています。

1つの投稿に、テーマごとに20~30枚程度の画像と
私たち女性スタッフの着用レビューなどが掲載されています。

イメージ説明

最初はとても快適に閲覧できていたのですが、
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クラウドになりました。

イメージ説明

■HTTPアクセス不能になったときの状況
・1/12日
イメージ説明

・1/16日
イメージ説明

■メモリの設定
・WordPress側のwp-configに下記の指定はありませんでした。
define('WP_MEMORY_LIMIT', '★★M');

・php.ini側の設定は下記です
イメージ説明

■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

■遅延の直前直後詳細
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • w_nagai

    2017/01/19 23:06

    参考までに、wordpressとphpの使用メモリはどのくらいでしょうか? define('WP_MEMORY_LIMIT', '64M'); https://wpdocs.osdn.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86 post_max_size http://php.net/manual/ja/function.ini-get.php

    キャンセル

  • maifukuhara

    2017/01/20 09:22

    コメントありがとうございます。wordpressとphpの使用メモリを追記しました。

    キャンセル

  • Kosuke_Shibuya

    2017/01/21 11:17

    phpおよびMySQLのバージョンは幾つですか?

    キャンセル

回答 3

checkベストアンサー

+2

ぱっと見メモリはあんまり変化していないのでCPU(処理系)が怪しいんじゃないかなと思います。(※非効率な処理などが多いなど)
Queries per second avgがちょっと大きすぎるので
あんまり良くないクエリになっているか無駄に大量に発行しているんじゃないかなーとも。(使っているプラグインによってもこのあたりは大きく変わります)

SSHで接続し、topやsarコマンドでプロセスをモニタリングしてみてください。
CPU使用率が高いプロセスが見つかるのではないでしょうか。

あと、前触れなく落ちている感もあるので、落ちる直前のアクセスログも調べてみてください(これは提示していただかなくても大丈夫です。)
妙に多いアクセスがあったりすればそれもチェックしてみてもいいかなと。
不正アクセスのさばき方に問題があってアクセス過多でタイムアウト、みたいなこともWordPressを使用している方には少なくないので。

とはいえ、内部処理を見直すのは順当とはいえ
時間もコストもかかるので、場合によっては
・サーバースペックを上げる
・Kosuke_Shibuyaさんのおっしゃっているように処理効率の高いverを使用する
などのほうが安価で早い場合が多いというのも実情ではありますが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/23 19:19

    ご回答ありがとうございます。
    遅延発生時の前後のエラーログを見てみたところ、
    XMLRPCに20分で50回くらいのアクセスがありました。
    おっしゃる通り、攻撃によるCPU不可が要因の可能性が高いです。
    現在、下記対策を実施して様子を見ています。
    ・.htaccessで、xmlrpc.phpをアクセス禁止にしました
    ・wp-login.phpにベーシック認証をかけました

    数日様子を見て、PHPバージョンアップなどの対策も
    実施してみようと思います。

    キャンセル

  • 2017/01/23 22:55

    xmlrpc.phpを経由した不正アクセスによる負荷増加も一つの要因ではありますが、
    数的にもたいしたことはないので
    内部処理が根本的要因と考えるのが妥当です。
    そちらもよくチェックするほうが良いでしょう。

    またxmlrpc.phpのアクセス禁止は
    Order allow,deny
    Deny from all
    みたいな方法でしょうか?もしそうであれば、実は負荷はほとんど軽減できないので

    例えば、
    RewriteEngine On
    RewriteBase /
    RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L] #この一行を追記
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    (※WordPressデフォルトのhtaccessの"RewriteBase /"の後に一つRuleを加える)

    のように「http://0.0.0.0/へ飛ばす」(=無効なURLへリダレクト)などしてやるほうが良いです。

    キャンセル

  • 2017/01/24 09:08

    アドバイスありがとうございます。
    おはずかしながら、まさにdeny from all しちゃってました。
    さっそくhtaccessを修正しました。

    ご指摘の通り、XMLRPCは大した要因ではなかったらしく、
    大きく改善はされないようでした。

    これまでで、CPU100%が続き、ロードアベレージが7や8に
    なったままだと、遅延やダウンになり、なおかつ、
    送受信が多くてもCPU使用率が上がらないタイミングも多いこと、
    そして送受信が平均値くらいでもCPU使用率が跳ね上がることが
    あることから、おっしゃる通りなんらかの内部処理が怪しいのかもしれません。

    夜間のピーク時にtopやsarコマンドなどで、状態を見ていきます。

    キャンセル

+2

PHP5.3 -> 7.0または7.1 にアップデートすることで、かなりパフォーマンスは上がります。
MySQL5.1 -> 5.5 以上にアップデートすることで、かなりパフォーマンスは上がります。

一応、現在の状態で、php -m の結果を補足してください。

注意)Wordpress は最新のバージョンにアップデートできる状態になっているか?下手に改造(魔改造)していたりすると動かなくなる可能性がある。バックアップを取った上で行ってください。最悪、バージョンをダウンゲレードして戻す必要があるかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/21 12:33

    ご回答ありがとうございます。 PHPモジュール情報を追記しました。
    PHPのバージョンを上げるという手があるのですね。
    バージョンアップは上司が怖がっているので、
    専門業者さんにお願いできそうか調べてみます

    キャンセル

  • 2017/01/21 12:40

    怖いという気持ちもわからないではないですが、いくらなんでも5.3は古すぎますね。セキュリティ的にも問題があるので、プログラマーとしては、5.3を使っていることの方が何倍も怖いです。

    5.3のままでということであれば、以下の方法もありますが、オススメはしません。急場凌ぎで試すくらいの価値はありますが。
    http://dev.classmethod.jp/server-side/eaccelerator-performance-up-php-wordpress/

    キャンセル

  • 2017/01/21 15:37

    ありがとうございます。PLESKのGUIから、割とお手軽に
    5系、7系ともにバージョンアップできるらしいので、
    それでやってみようと思います。

    キャンセル

  • 2017/01/21 15:42

    wordpressのバックアップは完全に取った上で、行いましょう。下手をコクと再生不可能になります。

    キャンセル

+1

nginx(と PHP)・MySQL は、同じサーバ上にインストールされているのでしょうか?

であれば、まずはどのプロセスが CPU を占有しているのかを確認するのが先決かと思います。
(おそらく nginx と MySQL のどちらかでしょうが)

それが特定できないと、以降の調査や対策の方針が立てられませんので。

以下のページの、特に"CPU使用率とIO待ち状態を調べる"という項 以降が参考になるかと思います。
http://qiita.com/yuku_t/items/2f5341e4aa635800a0a1

"遅延の直前直後"のデータが取得できればベストですが、アクセスがピークになる時間帯のデータが取れればベターかと思います。


また、マニュアルを読む限り、nginx はデフォルトの設定では 1CPUコアしか使用しないようです。
http://nginx.org/en/docs/ngx_core_module.html#worker_processes

Syntax:    worker_processes number | auto;
Default:    
worker_processes 1;
Context:    main
Defines the number of worker processes.

念のため、この設定も確認してみてください。

nginx は不勉強なので私から確かなことは言えないのですが、設定変更の際は以下のページなどが参考になるかと思います。
http://www.crystalsnowman.com/?p=344


あと、

・ディスク使用量 
10%くらい

とのことですが、グラフ画像を見る限り、90% 使用しているように見受けます。

これが本件の原因か否かは何とも言えませんが、「使用率 90%」は、間違いなく危険水域です。
サーバにログインしてdf -hコマンドを実行するなどして、実際の使用量を確認してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/24 09:15

    ご回答ありがとうございます。
    おはずかしながらnginxについては実は全然わかってなくて、
    GUIコンソールでONにしてるだけでした。これから勉強しなきゃですね。

    とりあえずはご紹介いただいたページを見ながら、
    負荷が高そうな処理がどれか、調べていきたいと思います。
    わかりやすいテキストを教えていただきありがとうございます。

    なお、ディスクについてはこんな感じでした。
    $ df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/vda1 197G 14G 173G 8% /
    tmpfs 1.9G 20K 1.9G 1% /dev/shm

    キャンセル

  • 2017/01/24 17:16 編集

    maifukuhara様

    レスありがとうございます。

    > 負荷が高そうな処理がどれか、調べていきたいと思います。
    問題箇所が特定できれば、その分 解決に近づけると思います。
    頑張ってください。

    > なお、ディスクについてはこんな感じでした。
    'df -h'コマンドの実行結果を見ると、確かに 10%弱しかディスクを使用していませんね。
    安心しました(^^;

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    C++ のプロジェクトが作成できない

    前提・実現したいこと Visual Studio Communittyのインストーラをダウンロードし、 設定を変えず、標準でインストールしたのですが、C++の開発ができません。

  • 解決済

    開発環境のPhpMyAdminを日本語で表示したい

    環境 ・Apache   ・Mac OS Sierra   ・Homebrew ・PHP Version 7.0.14 ・mysqlnd 5.0.12 やりたいこと

  • 解決済

    MySQL PHPについて

    このコードで「ページは機能していません」というエラーがでます。なぜでしょうか? <?php try { $db = new PDO("mysql:host=mys

  • 解決済

    MySQLのLEFT JOINとNOT EXISTSの違い

    データの検証をするためにSQLを書きましたが思った結果になりません。 table_aとtable_bを比較して、table_aだけに存在するデータを得るのが目的です。

  • 受付中

    ER図について

    つぶやきアプリを作っているのですが、 ER図を作るとする例えばどんなものがありますか?? サンプル程度でいいので教えていただきたいです

  • 解決済

    【MySQL】アプリからのコネクションを確認する方法が分かりません。

    お世話になります。いつもありがとうございます。 表題の件、知見のある方がおられましたら、 ご教示お願いいたします。 前提・実現したいこと LAMP環境でアプリを作成しております

  • 受付中

    Warning: Parameter 2 to mysqli_stmt::bind_param() ...

    以下のコードを実行すると表題のエラーメッセージが出ます。サイトによっては$paramsの前に'&'を加えるとのことですが他のエラーメッセージが出てしまいます。ちなみにcodeはアル

  • 解決済

    C#からGoogle Sheets APIを呼び出したい

    前提・実現したいこと Visual Studio 2015でアプリ作成中です。 C#からGoogle Sheets APIを呼び出したいのですが、実行するとエラーメッセージが表

同じタグがついた質問を見る

  • WordPress

    7160questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • Linux

    3756questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • VPS

    345questions

    VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

  • CDN

    17questions

    CDNは、Webコンテンツをインターネット経由で配信するのに最適化されたネットワークを指します。Webサイトにある静的コンテンツをWebサイトが管理されているサーバーとは異なるサーバーにキャッシュし代わりに配信することで、負荷が分散し速度を向上する仕組みです。

  • 負荷分散

    14questions

    負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。