SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

JMeterでWebアプリケーションのパフォーマンス測定を行う

オープンソースの負荷テストツールJMeterの利用


テスト実行・検証

実行

 それでは、これまで設定した情報でテストを実行してみます。実行するには、メニューから[実行]→[開始]を選択します。実行を開始した後にリスナーを表示させると、情報を収集して表示し始めているのが分かります。実行が終わったら3つのリスナーをそれぞれ確認してみましょう。

グラフ表示リスナーからの検証

 グラフは以下のようになりました。

グラフ表示リスナー
グラフ表示リスナー

 色別に分かれていて、 「現在のレスポンス時間(黒)」、「平均のレスポンス時間(青)」、「標準偏差(赤)」、「現在のスループット(緑)」ということを意味します。ここで、レスポンス時間とスループットについて、そしてそれらのグラフをどのように解釈して対策をするかについて解説します。

 スループットとは、単位時間あたりにシステムがどれほどのリクエストを処理しているかを数値化したものです。また、レスポンス時間とは、リクエストを受けてからレスポンスを返すまでの時間です。負荷を与えていくとそれらが一般的にどうなっていくかのおおまかなイメージを図にしました。

スループットとレスポンス時間の関係図
スループットとレスポンス時間の関係図

 スループットは負荷を与えていくごとに数値が上がっていきます。これは、増加した負荷をそれだけ処理できていることを意味します。しかし、システムの処理能力には限界があるので、そのまま負荷を与え続けるといずれ限界に達します。これが図の限界線の部分です。限界線を超えてさらに負荷を与え続けると、そのままそれを維持するか(図の「1」)、下降をたどっていきます(図の「2」)。そのままスループットを維持することができれば理想ですが、多くのシステムの場合はスループットが下がっていきます。スループットがあまりに下がりすぎると、多くのユーザがアクセスがした際にシステムが止まってしまうということになりかねないので、注意が必要です。

 また、レスポンス時間は、スループット限界線に達するまでは比較的低い数値を示しますが、その後大きく数値が上がっていきます。これは、スループット限界線に達するまでは、システム能力に見合った処理が行えているので、レスポンス時間が安定して速い数値を示しますが、スループット限界線を超えると、新たに増えた負荷に対して十分に処理できていないため、レスポンス時間が遅い数値を示していることを意味します。

 では実際にボトルネックはどのようなプロセスで発見していけばいいでしょうか? まず、スループットの限界に達する前にレスポンス時間が遅い場合には単一のリクエスト処理が遅いということが言えるので、1つのスレッドで実行してみて、特に重い処理を確認します。そして、その後にスループットの限界線をどうやって必要なところまで伸ばし、維持するかを考えていきます。ボトルネックは、アプリケーション、DB、ハードウェアなどどこに問題があるかさまざまですが、ログなどを確認し、仮説を立てて、検証していくことが大切です。

 本稿のテストでは、環境的な問題もあり、あまり分かりやすいグラフは出力されませんでしたが、上の図と解説を参考に検証してみてください。

結果を表で表示リスナーからの分析

 このリスナーでは、リクエストごとに行が分かれ非常に行が多いため、分かりやすく抜粋しました。ここではテスト直後、テストピーク時、テスト終了直前の3つのポイントで各リクエストの情報を表示しています。左から、リクエストの連番、HTTPリクエスト名、レスポンス時間(ミリ秒)、リクエストが成功したかどうか、レスポンスのバイト数です。これをみるとテスト直後とピーク時ではレスポンス時間に5倍近くの差があるのが分かります。ただ、ピーク時でも2秒もかかっていないことを考えると、今回の負荷程度であればユーザはそれほど不満なく使えるということが言えそうです。このように、表のリスナーを見ることにより、数値を用いた細かい分析を行えます。

5      STEP2-WRITE    350    true    163022
6      STEP2-WRITE    311    true    163286
7      STEP2-WRITE    340    true    163550
8      STEP2-WRITE    370    true    163814
9      STEP2-WRITE    501    true    164078
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
731    STEP2-WRITE    210    true    126062
732    STEP2-WRITE    1452   true    122366
733    STEP2-WRITE    1813   true    144542
734    STEP2-WRITE    1863   true    137150
735    STEP2-WRITE    1693   true    118670
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
1006   STEP2-WRITE    310    true    138998
1007   STEP2-WRITE    291    true    139262
1008   STEP2-WRITE    480    true    139526
1009   STEP2-WRITE    291    true    139790
1010   STEP2-WRITE    340    true    140054

アサーション結果リスナーからの分析

 アサーション結果リスナーでは、アサーションの結果が表示されています。もし結果がエラーであれば、Testfailedといった文字列が表示されます。今回は全てのリクエストが正常に処理され、メモ一覧画面が表示されています。

アサーション結果リスナー
アサーション結果リスナー

補足

 本稿のはじめの方で書いたように、負荷テストで正しいテスト結果を得るためには、正しい環境である必要があります。多くのリクエストを送信してテストする場合には、1台のPCではCPU、ネットワークの限界があり、正しいテスト結果を得るのは難しいでしょう。そこで、JMeterにはリモートテストと呼ばれる機能が存在します。これを使用することにより、複数の端末のJMeterをコントロールし負荷テストを行うことができます。詳細は、本稿では取り上げていませんので、Apache JMeter:Remote Testingを参照してください。

まとめ

 昔、ブロードバンド回線がまだ流行っていない時代に「8秒ルール」という言葉がありました。これは、Webページを表示するのに8秒以上かかると表示されないだろうと思って他のページへ飛んでしまい、次に訪れてくれる可能性も非常に低いというルールです。しかし、今はブロードバンド回線も普及し、2、3秒でも耐えられないユーザも増えてきていることは間違いないでしょう。サービスをリリースする前からJMeterを使用し、どの位のユーザ数を超えると品質を維持できなくなるかを検証して対策をとることは、とても重要なことです。本稿がJMeterを用いた負荷テストの導入のお役に立てれば幸いです。

参考資料

  1. Apache JMeter
  2. AN OVERVIEW OF LOAD TEST TOOLS

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 佐藤 真介(サトウ シンスケ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/336 2008/08/19 20:51

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー