検証!安定しているのはどっち?
検証環境と検証方法
それでは、今回のWebサーバ安定性を比較する検証内容について説明します。
今回の検証にて利用した環境は、「第2回:性能検証!早いのはどっち?(http://www.thinkit.co.jp/article/119/2/)」の性能試験を実施した環境と同様です。サーバ機器およびクライアント機器を1台ずつ準備し、サーバ機器にてWebサーバを稼働させた状態で、クライアント機器から負荷を調節しながら複数のリクエストを発行し、その際のWebサーバの挙動を確認します。
これらの環境の詳細については「第2回:性能検証!早いのはどっち?(http://www.thinkit.co.jp/article/119/2/)」の環境の説明をご参照ください。
また、サーバサイドで稼働させたWebサーバのプロダクト、およびクライアントサイドで稼働させたリクエストを発行するツールを紹介します。
比較対象とするWebサーバは以下の通りです。
・Apache 2.2.9(mpm:prefork)
・Apache 2.2.9(mpm:worker)
・lighttpd 1.4.19
リクエストを発行するツールはab(Apache Bench)です。ただし、abだけでは、今回の検証内容を実施するだけのオプションが無いので、足りない部分についてはシェルスクリプト(bash)で実装しました。
なお、使用した機器やツール、および対象とするWebサーバのプロダクトとバージョンは「第2回:性能検証!早いのはどっち?(http://www.thinkit.co.jp/article/119/2/)」で使ったものと同一ですので、それらのツールや設定の詳細についても、第2回の環境の説明を参照してください。
次に今回の検証内容についてですが、前ページで紹介した検証ポイントをもとに以下の3パターンの検証を実施しました。
検証1として「低負荷な状況」を想定し、Webサーバに対して、3~5秒おきに3~10リクエスト発行する状況を、24時間継続して実施しました。
検証2として「高負荷な状況」を想定し、Webサーバに対して、同時接続数100にて、絶えずリクエストを発行する状況を、8時間継続して実施しました。
検証3として「低負荷な状況と高負荷な状況が繰り返しおとずれる実運用」を想定し、Webサーバに対して、3~5秒おきに3~10リクエスト発行する状況を継続させつつ、30分ごとに2~3分ほど同時接続数50~100の高負荷な状況を作りました。この状況を24時間継続して実施しました。
検証結果から安定性を比較する
検証結果は図2のようになりました。
3パターンの検証に対して、リクエストに対して正常にレスポンスが返せたか、サーバのエラーログに異常は見られないか、メモリリークが発生していないかを確認しました。また、検証終了直後のメモリ使用量についても確認し、検証3については、検証中の最大メモリ使用量も確認し、各Webサーバがどのくらいのリソースを消費しているのかも確認しました。
まず検証1の「低負荷な状況」を想定した環境での結果を紹介します。Apache(prefork)、Apache(worker)、lighttpdともに、発行された全リクエストに対して、正常にレスポンスを返すことができていました(Failed requestsはすべて0でした)。Webサーバ側のエラーログやメモリリークについても異常は見られず、すべてのWebサーバで正常に稼働していたと言えます。
大きな違いが見られたのは、サーバ側でのWebサーバプロセスのメモリ使用量です。図2を見ていただければ分かるとおり、各Webサーバの設定がデフォルトのままというのもありますが、起動後のメモリ使用量からランニングテスト後のメモリ使用量まで、Apacheとlighttpdには大きな差がありました。
続いて検証2の「高負荷な状況」を想定した環境での結果も、ほぼ検証1と同じ結果となっています。高負荷な状況が続いても、Apacheやlighttpdは共に、ハングアップすることなく正常に稼働しており異常は見られませんでした。
検証3の「低負荷な状況と高負荷な状況が繰り返しおとずれる実運用」を想定した環境での結果もほぼ検証1と同じ結果となっています。
ピーク時想定の大きな負荷をかけた場合、図2の「検証3実施中の最大メモリ使用量」に示す通り、Apacheはメモリ使用量が大きくなりました。これはApacheは子プロセスに処理を委譲し負荷に応じてプロセスを生成するためですが、通常時想定の負荷量になった時は、きちんと子プロセスが減少し、メモリが解放されていることが確認できました。
lighttpdについては、負荷量にかかわらず、一貫して1プロセスがすべてを処理していたため、メモリ使用量についてはそれほど変動がありませんでした。
安定性について、図2に示す今回の3パターンの検証結果からは、Apacheとlighttpdは共に安定して稼働しており、問題は見られませんでした。
なお、小さなサイズのファイル配信だったせいか、メモリの使用量も共に大きくはなりませんでしたが、lighttpdの方がApacheよりメモリ使用量が小さいといった結果になりました。
ただし、これについては、利用状況および設定によって、大きく変動する可能性があることに注意してください。
では、最後にまとめとして本連載の比較内容をまとめてみましょう。