前回はWordpresで運営しているこのWebサーバをApacheからnginxに変更しました。
今回はApacheとnginxの比較をしてみたいと思います。
なお、今回のApacheの環境ではmod_pagespeedは無効にしてあります。
比較の方法
比較するページはトップページ(https://scratchpad.jp/)と割とアクセスのあるhttps://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でトップページ(https://scratchpad.jp/)を計測した結果は次のようになりました。
トップページのhtmlデータを読み込む処理時間の内訳は次のようになりました。読み込みに2.95秒かかり、そのうち1.47秒が待ち時間、つまりWebサーバ側でデータを用意している時間です。
「ab –n 100 –c 10 https://scratchpad.jp/」を実行した結果は次のようになりました。
Faild Request | 45 | (小さいほうが良い) |
Request per socond | 0.86 [#/sec] | (大きいほうが良い) |
Time per request | 1169.048 [ms] | (小さいほうが良い) |
Transfer rate | 62.89 [KB/sec] | (大きいほうが良い) |
単一記事の結果
次にhttps://scratchpad.jp/google-nexus7-42/の測定結果です。
htmlデータの読み込み時間の内訳は次の通りです。こちらは読み込みに5.41秒かかり、そのうち3.87秒が待ち時間(Webサーバ側でのデータ準備時間)でした。
「ab –n 100 –c 10 https://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でトップページ(https://scratchpad.jp/)を計測した結果は次のようになりました。ApacheのときのLoad timeは5.76秒です。
htmlデータの読み込み時間の内訳は次の通りです。こちらは読み込みに2.70秒かかり、そのうち1.45秒が待ち時間(Webサーバ側でのデータ準備時間)でした。Apacheのときはそれぞれ2.95秒と1.47秒です。
「ab –n 100 –c 10 https://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] | (大きいほうが良い) |
単一記事の結果
次にhttps://scratchpad.jp/google-nexus7-42/の測定結果ですApacheのときのLoad timeは8.67秒です。
htmlデータの読み込み時間の内訳は次の通りです。こちらは読み込みに4.31秒かかり、そのうち3.62秒が待ち時間(Webサーバ側でのデータ準備時間)でした。Apacheのときはそれぞれ5.41秒と3.87秒です。
「ab –n 100 –c 10 https://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をチューニングして見ます。
コメント