WordPress高速化: Apacheとnginxの比較

Use the 8% OFF coupon "GBvalentine", Grab the Best Valentine’s Day Gifts Best Deals from Just $25 @GearBest! Ends: 1/23/2017.
砂時計

前回はWordpresで運営しているこのWebサーバをApacheからnginxに変更しました。

今回はApacheとnginxの比較をしてみたいと思います。

なお、今回のApacheの環境ではmod_pagespeedは無効にしてあります。

比較の方法

比較するページはトップページ(http://scratchpad.jp/)と割とアクセスのあるhttp://scratchpad.jp/google-nexus7-42/にします。

これは以前Apacheにmod_pagespeedを導入したときに測定したものと同じです。

測定ツールはpingdomというサイトとApacheに付属するabコマンドです。

abコマンドは自宅のLinuxマシンで実行し、条件は「-n 100 –c 10」とします。abの計測結果は長いので、主な点だけ示します。

まず、WebサーバをApacheに切り替えて測定し、その後nginxにして測定します。なので計測の時間帯的にはほぼ同じになります。また計測前にはmysqlをリスタートしています。

Apache

まずはWebサーバをApacheにしたときの測定結果です。

トップページの結果

pingdomでトップページ(http://scratchpad.jp/)を計測した結果は次のようになりました。

トップページ(Apache)

トップページのhtmlデータを読み込む処理時間の内訳は次のようになりました。読み込みに2.95秒かかり、そのうち1.47秒が待ち時間、つまりWebサーバ側でデータを用意している時間です。

トップページ分析(Apache)

「ab –n 100 –c 10 http://scratchpad.jp/」を実行した結果は次のようになりました。

Faild Request 45 (小さいほうが良い)
Request per socond 0.86 [#/sec] (大きいほうが良い)
Time per request 1169.048 [ms] (小さいほうが良い)
Transfer rate 62.89 [KB/sec] (大きいほうが良い)

単一記事の結果

次にhttp://scratchpad.jp/google-nexus7-42/の測定結果です。

単一記事(Apache)

htmlデータの読み込み時間の内訳は次の通りです。こちらは読み込みに5.41秒かかり、そのうち3.87秒が待ち時間(Webサーバ側でのデータ準備時間)でした。

単一記事分析(Apache)

「ab –n 100 –c 10 http://scratchpad.jp/google-nexus7-42/」を実行した結果は次のようになりました。

Faild Request 84 (小さいほうが良い)
Request per socond 0.81 [#/sec] (大きいほうが良い)
Time per request 1227.670 [ms] (小さいほうが良い)
Transfer rate 78.22 [KB/sec] (大きいほうが良い)

nginx

続いてWebサーバをnginxにした時の測定結果です。

トップページの結果

pingdomでトップページ(http://scratchpad.jp/)を計測した結果は次のようになりました。ApacheのときのLoad timeは5.76秒です。

トップページ(nginx)

htmlデータの読み込み時間の内訳は次の通りです。こちらは読み込みに2.70秒かかり、そのうち1.45秒が待ち時間(Webサーバ側でのデータ準備時間)でした。Apacheのときはそれぞれ2.95秒と1.47秒です。

トップページ分析(nginx)

「ab –n 100 –c 10 http://scratchpad.jp/」を実行した結果は次のようになりました。いずれの数字もApacheのときから改善しています。特にFaild Requestは45から0に劇的改善しています。

Faild Request 0 (小さいほうが良い)
Request per socond 1.05 [#/sec] (大きいほうが良い)
Time per request 948.879 [ms] (小さいほうが良い)
Transfer rate 77.43 [KB/sec] (大きいほうが良い)

単一記事の結果

次にhttp://scratchpad.jp/google-nexus7-42/の測定結果ですApacheのときのLoad timeは8.67秒です。

単一記事(nginx)

htmlデータの読み込み時間の内訳は次の通りです。こちらは読み込みに4.31秒かかり、そのうち3.62秒が待ち時間(Webサーバ側でのデータ準備時間)でした。Apacheのときはそれぞれ5.41秒と3.87秒です。

単一記事分析(nginx)

「ab –n 100 –c 10 http://scratchpad.jp/google-nexus7-42/」を実行した結果は次のようになりました。Apacheのときから、Faild Requestは84→2と劇的に改善していますが、その他の数値は悪化しています。

Faild Request 2 (小さいほうが良い)
Request per socond 0.66 [#/sec] (大きいほうが良い)
Time per request 1521.908 [ms] (小さいほうが良い)
Transfer rate 63.09 [KB/sec] (大きいほうが良い)

まとめ

全体的に見てnginxを導入することによって次のような効果があることがわかります。

  • ページの読み込みはわずかだが早くなる
  • 負荷が高いときの接続は劇的に早くなる

また、Apache/nginxいずれの測定結果でも、処理時間の内訳を見ると待ち時間が大きな割合を占めていることがわかります。このため、ボトルネックはWebサーバではなくPHPの処理およびMySQLの処理でないかと考えられます。

次回は更なる高速化を目指してnginxとphp-fpmをチューニングして見ます。