Webサーバのパフォーマンスを測る : JMeter

仕事で「サーバのパフォーマンスを測定する」ということを、時々やる。
測定対象のサーバがどんな用途なのかで、測定する方法が違ってくるのだけど、HTTPであればJMeterを使うことが殆ど。
#SMTPだと同僚が作ったPerlスクリプトで。

実際に測定してみたときにわかったことなどを、備忘録として残しておきます。
JMeter自体は、POPやIMAP、LDAPなどのパフォーマンス測定が出来るみたいだけど、そのあたりは試したことはないので、HTTPに限ってのお話ということで。HTTPの測定がメインだけど、JMeterのインストールや使い方については、ググってみれば沢山出てくるので、そっちを参考に。


JMeterで、十分な負荷をかけるには

このあたりは実際に使ってみてわかったことも多いので、自分が使ってみた範囲での感想や回避策など、書いておきます。

  • NetbookクラスのPC 1台でも、200リクエスト/秒程度の負荷をかけることは可能。(勿論、測定対象のスペックや測定用のコンテンツの作りに左右される。)
  • 高負荷な環境をシミュレートしたいとか、パフォーマンスの限界を測定したいという場合にはNetbook 1台では役不足なので、JMeterをインストールしたPCを複数台用意しましょう。
    • 同じスペックのPCが複数台用意出来ると、Betterです。
    • ちなみに、Core2 Duo 2.4GHzのPC 3台が使えれば、1500リクエスト/秒ぐらいの負荷が生成できます。
  • 複数台のPCで負荷をかけるときは、jmeter-serverを動かすPCとは別に、それを制御するコントローラ用PCを用意した方がいいです。
    • テストの開始や中断の指示はコントローラPCから出来ます。
  • テスト用コンテンツは、測定対象のサーバ内でリンクが完結しておくことが、better。
    • 例えば、自分の会社のWebサイトのミラーを作ってテストしようとした場合、外部サービスへのリンク(所在地の案内にGoogleMap使ってたり)があったりすると、そちらへのリクエストにかかる時間の影響を受けて、正確なパフォーマンスが測定出来ない可能性あり。(測定用ネットワークからグローバルにアクセスできない構成だと、影響大。)
TestCase.png

JMeterでの実測例

あんまり細かいことは書けない(^^;けど、実際にテストした時の構成は、だいたいこんな感じ。→
測定したかったのは、SquidとAntiVirusスキャナを組み合わせた時のProxyサーバのパフォーマンスなので、JMeterを起動時のオプション指定でテストしたいProxyサーバのアドレスとポートを指定すればOK。(コマンドプロンプトから"jmeter.bat -H Proxyサーバのアドレス -P 3128"というように実行。)

テストに使うコンテンツには、

  • Apacheのソースアーカイブに同梱されているマニュアルページ
  • 画像100枚を貼り付けたHTMLファイル(画像の容量別に四種類)
    • 画像は、個人的に撮り貯めたモノから肖像権的に問題なさそうなものをピックアップ

を用意して、Webサーバに配置。
で、下記のような

  • JMeter用PC:Core2 Duo 2.66GHz ×3台(+コントロール用PC1台)
  • Proxyサーバ:Xeon 3.0GHz ×2
  • Webサーバ:Xeon 5160 3.0GHz(Quad Core)

構成で実測してみたところ、Max 1500アクセス/秒程度、という結果が出ました。
これは実際に測定してみると判るのだけど、画像へのアクセスがメインだとアクセス数はダウンするけどスループットが300Mbps近くまで出るとか、HTMLファイルがメインだとアクセス数が多くてもスループットの方は伸びないといったことになるので、テストパターンは複数用意したうえで、それぞれの結果から性能を判断するということになると思います。
テストパターンを作るのも、色々試行錯誤してみないと判らないところもあったりするし、どんなサイトに対してどういうアクセスパターンがあるのか、といったことを想定しないとダメだったりと、色々考えどころも多いので、本格的にやるとかなりの労力を割かれることになるのは、確かです。

トラックバック(0)

コメントする