JMeterを用いた Lotus Domino Web アプリケーションのパフォーマンス計測 2011/09/21 Lotus Technical Update Workshop
by user
Comments
Transcript
JMeterを用いた Lotus Domino Web アプリケーションのパフォーマンス計測 2011/09/21 Lotus Technical Update Workshop
2011/09/21 Lotus Technical Update Workshop JMeterを用いた Lotus Domino Web アプリケーションのパフォーマンス計測 ⽇本アイ・ビー・エム システムズ・エンジニアリング株式会社 コラボレーション・ソリューション 岡本茂久 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 このセッションのGOAL LotusDomino のWebアプリケーションの パフォーマンステストを⾏うにあたって、実際の ユーザー動作を再現した負荷をLotus Dominoサー バーにかけられること! ? 2 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 アジェンダ パフォーマンステストについて 負荷テストツールの役割 JMeterによるLotus Domino Webアプリのテスト計画 Tips 〜より良いテスト計画のために 3 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 パフォーマンステストの必要性 Web化開発したアプリがLotus Notesクラ イアントからのアクセス時より重い…… サイジング通りのシステム構成なのにユー ザーアクセスが増えるとダウンする…… チューニングの必要性を感じるがどこがボ トルネックかはアクセス負荷を再現しない と分からない…… パフォーマンステスト(性能テスト)で システムの性能を知ろう! 4 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 パフォーマンステストについて パフォーマンステスト システムがお客様のパフォーマンス要件を満たしているか 検証する ⼈⼿や負荷テストツールでアクセス、動作を検証 ボトルネックの発⾒、分析、除去 →レスポンスタイム、リソースの使⽤状況 (CPU使⽤率、メモリ使⽤量、ページング率、 ディスクI/O) 負荷テスト ⾼い負荷のかかった状況下でのシステムの性能を検証する ピーク時やそれ以上の負荷状況下でのシステムの動作検証 飽和点を超えても安定したシステムであることの確認 →レスポンス、リソースの他にスループットも測定 5 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 いつパフォーマンステストを⾏うか アプリ開発の単体テストの他、サービスイン前の総合テスト の中で⾏われることが多い パフォーマンス (性能)要件 ……⾮機能要件から 抽出 サイジング (システム構成決定) システムの評価 (パフォーマンス テスト) 構築…開発…単体 テスト…… サービスイン チューニング 6 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 パフォーマンステストの指標あれこれ スループット :単位時間当りの処理量 レスポンスタイム :1アクセス当りの応答時間 ピーク時の 同時ユーザーアクセス数 スループット : 5件 / 秒 システム要件 多くはキャパシティ・プランニン グの際に性能要件として定義さ れる 特にスループットは、マシンスペッ ク(CPU能⼒)に直結する レスポンスタイム :3秒 ユーザー要件 900⼈のうちの70%がアクセス = 630ユーザー ユーザーのページ遷移における 平均 ThinkTime (思考時間) 7 ThinkTime :7分 ユーザー要件 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考 :スループット、レスポンスタイム曲線 「パフォーマンスが良い」とは? 飽和点における最⼤同時ユーザー数が 多い システムの飽和点 7000 6000 5000 4000 3000 最⼤同時ユー ザー数 システムリソースが効率良く使⽤され ている (CPU、メモリ、ディスク) 適切にチューニングされたシステ ムでは飽和点を超えてもスルー プットはほぼ⼀定の値を⽰す 7000 6000 5000 チューニング 4000 の必要性 3000 2000 レスポンスタイム︵㍉秒︶ / スループット曲線 適切なスループット曲線 レスポンスタイム曲線 1000 / 同時ユーザーアクセス数 8 スループットが⾼い リソース増強 パフ ォーマンス値 例 スループット ︵件 秒︶ 最悪のケースではサービス ダウンをもたらす 1000 レスポンスタイムが短い 0 同時ユーザーアクセス数 チューニングされていない システムでは最⼤同時 ユーザー数を超えると レスポンスタイムは急 激に下がる。 2000 レスポンスタイム︵㍉秒︶ パフ ォーマンス値 例 スループット ︵件 秒︶ スループット曲線 レスポンスタイム曲線 0 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 アジェンダ パフォーマンステストについて 負荷テストツールの役割 JMeterによるLotus Domino Webアプリのテスト計画 Tips 〜より良いテスト計画のために 9 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 どうやってテストするの? 〜負荷テストツールの役割 負荷テストに実際に必要なユー ザーを集めることは困難 パラメーターやユーザー数を変 えて繰り返しテストを⾏う必要 がある ⼤量のトランザクションを擬似 的に⽣成し、サーバーに負荷 をかける 本番時と同等の負荷状況下での パフォーマンスを測定 10 クライアント サーバー 負荷⽣成の シナリオ リソース監視 ・負荷⽣成 ・パフォーマンス測定 © 2011 IBM Corporation JMeterを用いたLotus Domino Webアプリケーションのパフォーマンス計測 負荷テストツールの選定 Lotus Domino付属のツールではコンテンツ書き込み系のテストがWebで出 来ないので、無償のJMeterを今回選択 必要となる機能 使用するプロトコルの サポート (今回HTTP) Server.Load Apache JMeter IBM Rational Performance Tester Lotus Domino管理クラ イアントに付属してい る 無償ツール 負荷テスト製品 (有償ライセンス) ☓ ◯ ◯ 参照系(GET)のみ テストシナリオの作成・ 保存 △ ◯ ◯ 仮想ユーザー数、実⾏ スケジュールの設定 △ ◯ ◯ 作成したシナリオの実⾏ とテスト結果の記録 ◯ ◯ ◯ テスト結果の分析補助 △ △ ◯ スクリプトの作成 固定ユーザーのみ グラフは自作 11 プロキシでユーザー操 作トレース 複数ユーザー可能 グラフは自作 プロキシでユーザー操 作トレース 複数ユーザー可能 グラフ作成 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 Apache JMeterとは Apache Jakarta プロジェクトにより開発されている、フリーで100% Javaのパフォーマン ス・汎⽤テスト⽤ツール。 http://jakarta.apache.org/jmeter/ v2.5 が最新 (2011/08時点) 複数のスレッドを同時に起動して多重度による負荷をかけることが可能。 プロキシサーバー機能でブラウザ動作をキャプチャーしてテストシナリオを作成可能。 12 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterを⽤いたテストの流れ JMeterのダウンロード・インストール zipの解凍のみ http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi JMeterの起動 bin/JMeter.bat で起動 テスト計画の記録 ブラウザのリクエスト内容が⾃動記録されてシナリ オのベースとなる ・スレッドグループの作成 ・プロキシ機能でブラウザ動作を記録 JMeter テスト計画のカスタマイズ ・リクエスト内容のカスタマイズ、パ ラメーター、ログファイル定義 ・テスト計画の保管 (JMXファイル) JMeterでテスト実⾏ 結果の分析 13 様々な部品、結果確認機能が⽤意されている 定義したループをすべて終えるか、「停⽌」で終了 JMeter レポートやグラフの検討 またはCSVファイルを Excelなどで加⼯ © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の作成例(1/4) ① テスト計画(テストシ ナリオ)作成の準備 ・スレッドグループの作成 ・HTTPプロキシサーバー の追加 ② HTTPプロキシサーバー の開始 (デフォルトでポート番号 は8080) 14 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の作成例(2/4) ③ Webブラウザのオプションでプロ キシサーバーの使⽤を設定する ④ テスト対象にするWebアプ リケーションにアクセス、 テストシナリオのユーザー の⾏動を実施する 15 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の作成例(3/4) ⑤ Webブラウザー上の⾏ 動内容がHTTPリクエス トのエレメントとして記 録される ・プロキシの停⽌ ⑥ 必要に応じてシナリオを調整 ・不要なリクエスト要素の除去(gifなど) ・リクエストのグループ化、条件追加 ・リクエスト内容の変数化 ・タイマ(待ち時間)やリスナー(結果表⽰) の設定 : etc. 16 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の作成例(4/4) ⑦ 編集したシナリオを保存し て、テスト計画を「実⾏」 >「開始」 ⑧ テスト結果の検討 ・レスポンスタイムやス ループット、エラーは 発⽣していないか ・必要に応じてシナリオ を修正して再実⾏ ・ログをExcelなどでグ ラフ作成 :etc. 17 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 アジェンダ パフォーマンステストについて 負荷テストツールの役割 JMeterによるLotus Domino Webアプリのテスト計画 Tips 〜より良いテスト計画のために 18 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 Lotus Domino Webアプリ パフォーマンステストシナリオ例 検索対象DB :ディスカッションテンプレート(discsw7.ntf)によるDB ユーザー :100⼈ 参照系テスト :1,000⽂書(アクセス権による⾮表⽰有り)、セクションのある ビューから⽂書を3つ閲覧、添付ファイルをダウンロード :タイトル、本⽂を含んだ⽂書を3つ投稿、添付ファイルもアップロード HTTP 投稿系テスト Lotus Dominoアプリ利⽤形態の 特徴として、 ・重たくなりがちなビュー ・ユーザーによる投稿 は ぜひテストに含めたい! 19 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 シナリオ例1.参照系テスト ①アプリケーションのURLにブラウザでアクセス ②認証ダイアログ(フォーム認証ならログインページ)が出て認証が求められるので テストユーザーIDでログイン ③ナビゲーターの「カテゴリ別」をクリックしてカテゴリ別ビューを表⽰ ④カテゴリセクションのAを開く ⑤⽂書1を開く ⑥ナビゲーターの「カテゴリ別」をクリック してカテゴリビューに戻る ⑦カテゴリセクションのAを閉じる ⑧カテゴリセクションのBを開く ⑨⽂書2を開く ⑩添付ファイルのダウンロードを⾏う ⑪ナビゲーターの「カテゴリ別」をクリック してカテゴリビューに戻る ⑫カテゴリセクションのBを閉じる ⑬カテゴリセクションのCを開く ⑭⽂書3を開く ⑮ナビゲーターの「カテゴリ別」をクリックしてカテゴリビューに戻る ⑯カテゴリセクションのCを閉じる ⑰(ブラウザを閉じる)……特にJMeterからのリクエストはなし 20 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参照系シナリオの テスト計画例 テスト計画 左ペインで選択され た要素の設定値 スレッドグループ ユーザーパラメータ (前処理) HTTP認証/クッキーマネージャ (設定エレメント) ロジックコントローラ HTTPリクエスト (サンプラー) HTTPヘッダマネージャ タイマ ⼀連のリクエスト要素をコ ントローラでグループ化 統計レポート (リスナー) 結果をツリーで表⽰ グラフ表⽰ HTTPプロキシサーバ (Non-Testエレメント) 21 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 シナリオ例2.投稿系テスト ①アプリケーションのURLにブラウザでアクセス ②認証ダイアログ(フォーム認証ならログインページ)が出て認証が求められるので テストユーザーIDでログイン ③「新規⽂書を作成」をクリック ④⽂書1を保存(タイトル、カテゴリ、本⽂) ⑤ナビゲーターの「カテゴリ別」をクリックしてカテゴリビューに戻る ⑥「新規⽂書を作成」をクリック ⑦⽂書2を保存(タイトル、新カテゴリ、本⽂) ⑧ナビゲーターの「カテゴリ別」をクリックしてカテゴリビューに戻る ⑨「新規⽂書を作成」をクリック ⑩⽂書3を保存(タイトル、カテゴリ、本⽂、 添付ファイルのアップロード) ⑪ナビゲーターの「カテゴリ別」をクリックして カテゴリビューに戻る ⑫(ブラウザを閉じる)……特にJMeterからのリクエストはなし 22 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 投稿系シナリオの テスト計画例 ⼀連のリクエスト 要素をコント ローラでグルー プ化 23 左ペインで選択され た要素の設定値 投稿する添付ファ イル © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 1/9) テスト計画 :テストシナリオの単位。JMXファイルとして保存できる スレッドグループ :テストシナリオをプロパティに設定した値で実⾏ できる。⼀つのテスト計画に複数のスレッドグループを作成可能 同時に発⽣させる仮想ユーザー 数 スレッドの開始時間遅延 = ユーザーの投⼊間隔 スレッドを何回実⾏して 終了か? 開始 / 終了時間を設定可能 ユーザー1 ユーザー投⼊における Ramp-Up期間のイメージ ユーザー2 : ユーザー100 24 Ramp-Up期間 経過時間 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 2/9) ロジックコントローラ :複数のリクエストをまとめることができる。 実⾏条件などを指定可能 →複数アプリへの同時アクセスシナリオや、シナリオ分岐に便利 例)IFコントローラ、シンプルコントローラ、ランダムコントローラ、ルー プコントローラ…… HTTPリクエスト :実際にアクセスするURL、 パラメーターが記述される HTTPヘッダマネージャ :Referer情報など含む URL (サーバー名、パス)情報 ログイン時のユーザーパラメータ (フォーム認証時) 25 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 3/9) ユーザーパラメータ :POST処理で投⼊する定義パラメータ(ユーザー ID、ページID、検索ワードなど)を設定できる。HTTPリクエストか ら変数として呼び出せる →複数ユーザーがログイン認証するWebアプリケーションで必須! 「繰り返しごとに更新」に チェックすることで、スレッ ドごとに違うユーザーとし て振舞える HTTPリクエスト初期値 :HTTPリクエストに設定するサーバー名、ポート番号、プロトコル などを初期値として別設定できる →HTTPリクエスト内で空⽩になっ ている個所はこちらの設定が挿 ⼊される →異なるサーバー環境にテスト計 画を持っていくときに使える場 合がある 26 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 4/9) HTTPクッキーマネージャ :ブラウザと同様にCookieを保存して、以降のリクエストに⽤いる ことができる。 →フォーム認証(Cookieでセッション管理)に必須 「繰り返しごとにクッキーを破棄」 にチェックしていないと、次のス レッド(=異なるユーザー)で同 じセッションIDのクッキーが使わ れてしまう! ここには何も設定しなくてもよい。 HTTP認証マネージャ :基本認証の アプリケーションへのログインの 場合はこちらを⽤いる ユーザーを複数登録する場合には 「ユーザーパラメータ」に設定し て変数として呼び出す (後述) 27 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考:認証形式と対応エレメント サーバー設定⽂書の 「インターネットプロトコ ル」>「DominoWebEngine」>HTTPセッショ ン>セッション認証で設定 ・「無効」(デフォルト) → 基本認証 ・「単⼀サーバー」 → フォーム認証 ・「複数サーバー(SSO)」→ LTPAなどによる シングル・サインオン ACL付きアプリにアクセス 認証ダイアログ(基本認証) 認証ページ(フォーム認証) /names.nsf?Login のHTTPリ クエストでユーザー設定 にログインユーザー設定 でCookie管理 28 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 5/9) タイマ :次の処理に⾏く前にポーズする間隔を設定できる。いわゆるThinkTimeに相当。 例)定数タイマ、⼀様乱数タイマ、定数スループットタイマ… ThinkTimeそのもの。ここでは 3 秒。設置した階層で振舞い が異なる JMeterの表記バグ。 単位は (サンプル数/分) が正しい スループットを指定すると、結 果的にそのような負荷になる ようにThinkTimeを調整して くれる。 テストでは、本番ユーザーの分だけ仮想ユーザー / スレッドを⽤意することは困難なので、実 際に⽤いるスレッド数と、ThinkTimeの間隔を調整することで、想定した⼤規模ユーザーが アクセスしているのと同じ負荷がシステムにかかっているものと解釈することがある 29 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 6/9) 統計レポート :JMeterのリスナー(レポート機能)の⼀つ デフォルトのログ出⼒はXMLな のでExcelで解析する場合は設 定でCSVに変更しておく リクエスト毎の各指標を リアルタイムに書き換 えて表⽰する。テスト を継続しても重くなら ない。 →本番テストでお勧め! 各リクエストをラベル名で表⽰ →ラベルは⾒やすい名前に編集 しておいた⽅がよい 30 # Samples Average Median 90% Line Min Max Error % Troughput KB/sec :試⾏スレッド数 (=x⼈⽬のユーザーアクセス) :レスポンスタイムの平均値 :同中央値 :同90%の値が収まっている範囲 :同最⼩値 :同最⼤値 :エラー発⽣率(401、404など) :スループット :データ転送量 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 7/9) グラフ表⽰ :JMeterのリスナーの⼀つ。スループット曲線をリアルタイムに表⽰する ・あまり美しくない。 ・性能が頭打ちになる様⼦は判る。 ・単位がリクエスト/分であって、 page/secのグラフが欲しくてもカ スタマイズできない。 ・テストを継続すると描画が重く なる。 →デバッグの時だけ使える →カスタマイズグラフはログから ⾃作するしかない このサンプル数はスレッド数 (=同時ユーザー数)ではな く、全リクエストの累算 31 スループット曲線がリアルタイムに 得られるが…… 単位に注意 (リクエスト / 分) © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素 (例 8/9) 結果をツリーで表⽰ :JMeterのリスナーの⼀つ。 各リクエストの結果、リクエスト内容、応答データの内容が確認できる。 ・認証エラーなどは⾚で表⽰。 →POST(コンテンツ投稿)が失敗しても⾚になるわけではない ので注意! ・POSTパラメータの確認 ・返答のHTMLが確認可能 ・テストを継続すると激重。 やがてはJMeterがフリーズする →デバッグショットではお薦め 各リクエストの詳細情報 を表⽰ 32 リクエストに対する HTTP応答コード、 LTPAトークン、セッションIDなどが確 認できる © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 JMeterテスト計画の要素(例 9/9) 結果をツリーで表⽰ (続) 応答データのHTMLを確認 POSTデータを表⽰ (フォーム認証のログインユーザーID/パス ワード) 33 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 テスト結果ファイル ・CSV / XMLファイル ・デフォルトの拡張⼦は.jtl 桁を略表記 UTF-8形式なので⽂字化け エディタなどでSJISに変換 保存してから開く 経過時間 リクエストのラベル スレッド名 成功/失敗 … レスポンスタイム HTTPステータス データモード … 「数値」表⽰に直す 34 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考 :サーバーリソース観測結果例 :CPU使⽤率 (%) 参照系テストにおける CPU負荷 (nhttpサー ビス) エディタなどで変換 (hh:mm:ss) 投稿系テストにおけるCPU 負荷 (nhttpサービス) 35 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考 :リソース監視ツール Windows パフォーマンス・モニター – Windowsに付属の監視ツール – 「スタート」⇒「コントロールパネル」⇒「管理ツール」⇒「パフォー マンス」で起動 – ⾮常に多くの種類のカウンタ(計測項⽬のこと)が⽤意されている – コマンドでの実⾏例: typeperf "¥Process(*)¥% Processor Time" "Memory¥Available Bytes" >c:¥temp¥perF.csv ※AIXやLinux環境 のツール: nmon、nmon analyser、topas 36 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 ここまでのまとめ Webアプリの負荷テストツールである Apache JMeter は LotusDomino の Webアプリにも使 えそうだ。 複数ユーザーのログインや、ビューの閲覧、添付 ファイルのアップロード・ダウンロードといった 重たい処理もテスト対象にできそう。 これならサーバー に負荷をかけられ そう! 37 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 アジェンダ パフォーマンステストについて 負荷テストツールの役割 JMeterによるLotus Domino Webアプリのテスト計画 Tips 〜より良いテスト計画のために 38 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 シナリオ記録の時点でコントローラーにまとめておく デフォルトでワーク ベンチにリクエス トが記録されるけ ど、後で整理する のが⾯倒… 予めスレッドグループにロジックコ ントローラーを置いておき、そこ に記録させると扱いやすい! 39 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 パラメーターを外部ファイル読み込みにする 複数ユーザー登録 できるのはいい けど、100⼈も 1000⼈も⼿作 業で登録はたい へん…… ユーザー群を分け たり、検索語や 投稿コンテンツ などにも応⽤可 能 40 JMeter関数のStringFromFileで 定義可能 パラメーター (csv or txt) © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 アクセス権を反映したテストシナリオにするには 1つの同じシナリオだと、ユー ザーによってアクセス許可 が異なるコンテンツにアク セスした場合エラーになっ てしまう…… コントローラー ロジックコントロー ラーを使ってシナ リオを個別にした り分岐したりでき るんだ! ユーザーAログイン ⽂書1を開く コントローラー ユーザーBログイン ⽂書2を開く 41 ログイン IFコントローラー ユーザーAだったら実⾏ ⽂書1を開く IFコントローラー ユーザーBだったら実⾏ ⽂書2を開く © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考:複雑なシナリオ例 ⼈事部 ユーザー認 証処理 ⼈事部のID ならなら 実⾏ ログイン トップ ⼈事部 全社 営業部 ログイン 10回繰返 し トップ 全社 10回ループ 営業部のID ならなら 実⾏ 通達 便利 営業 ログアウト その他の社員 ログイン 42 トップ 全社 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 トラブルシュート:JMeter経由でコンテンツ投稿に失敗する?!(1/3) POSTリクエストが空振りの結果になることがある ……なぜ? JMeter ? Webブラウザから直接だと投稿できる⼿順が…… プロキシ経由だとInternalServerError(ResponseCode500)に終わる プロキシ経由だと添付ファイルのアップロードに失敗し、 java.io.FileNotFoundExceptionが表⽰される プロキシ経由ではうまく投稿できているが、JMeter上でシナリオを実⾏す ると投稿できていない : etc… 43 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 トラブルシュート:JMeter経由でコンテンツ投稿に失敗する?!(2/3) POSTのHTTPリクエスト⾃体は記録されているので…… 対応策1.「□Browser-compatitble headers」オプションをチェックし てみる (プロキシで記録されたデフォルト状態ではチェック無し) プロキシ経由でNGでもテスト実⾏でうまくPOSTされることがある JMeterのバージョン2.4 ではPOSTがうまく再現できないバグがあった Bug 50684 Optionally disable Content-Type and Transfer-Encoding in Multipart POST https://issues.apache.org/bugzilla/show_bug.cgi?id=50684 最近出たバージョン2.5 (モジュールの⽇付が 2011/8/17)ではリクエストに上記のheaders オプションが付き、この問題が回避されるようになっている 44 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 トラブルシュート:JMeter経由でコンテンツ投稿に失敗する?!(3/3) 対応策2.プロキシ経由だと添付ファイルのパスがうまく記録されないこと がある ⼿動でHTTPリクエスト中のファイル名を修正すると改善 対応策3.タイプミスなどで認証処理のユーザーID/パスワードがうまく 設定されていない可能性がある フォーム認証の場合、リスナー「結 果をツリーで表⽰」でログイン のPOST内容のユーザーID/パス ワードを確認できる 45 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考 :Dominoサーバー側でHTTPリクエストのPOSTのログを取る Notes.ini ファイルを編集して次の2⾏を追記し、 サーバー再起動 HTTPEnableThreadDebug=1 HTTPEnablePostDataLogging=1 HTTP リクエストログが有効になり、クライアントから要求される POST データのロギングが⾏われる。出⼒ファイルは <Domino_root>/Data/IBM_TECHNICAL_SUPPORT/ の下に htthr_<pid>_<tid>_<YYYYMMDD@HHMMSS>.log *** New Request -- Parse and Check Request: Session 384, Thread 508, Clock 57990296 POST /discuss7_test.nsf HTTP/1.1 Connection: keep-alive Cookie: DomAuthSessId=0552757B4EA48E8137BB51286A1BCA97; SessionID=CY02EEUK52 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Host: dom852.japan.ibm.com Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Keep-Alive: 115 : 46 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考 :Dominoサーバー側でユーザーセッションを確認する (フォーム認証の場合) コンソールで tell http show users とタイプ テスト前:ユーザー なし テスト直後のユーザー セッション 管理クライアントの サーバー > ステータス >インターネッ トユーザー でも同等の情報 が確認できる 47 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 負荷ツールのマシンがスペック低い… →分散環境でJMeter実⾏ 設定は⾮常に簡単: スレーブ1 ・負荷⽣成 コントローラーでJMeterを起動し、 「全て開始(リモート)」で開始 する スレーブ2 スレーブ側は、コントローラーか らRMI経由で依頼を受け、負荷テ ストを実⾏してマスターにデータ を送付する コントローラー ・シナリオ実施 ・ログの集計 スレーブ3 jmeter.properties を 編集してスレーブ マシンのIPアドレ スを記述する コントローラーの 負荷が思った以 上に⾼い…… JMeter-Server を起動。 rmiregistryも同時起動。 (JMeterの起動は必要無い) 代替案: 複数のマシンをスケジュー ラで同時開始する (ログのマージは⼿作業) 48 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考:パフォーマンス指標の設定値の考え⽅ (例) 性能要件例 ピーク時間の同時ユー ザーアクセス数 ピーク時1時間での平 均ページ遷移数 ⽬標スループット 6,300 (9,000⼈の70%) 6ページ →ThinkTimeは10分 = 600秒 *画像ファイル、JSファイルなどの扱いを検討し ておく 1.省く 2.⼀緒に分析する →1シナリオで 10ページ 70リクエスト 12.3 page/sec 定数スループットタイマ を ⽤いる場合 定数タイマ を⽤いる場合 30スレッド スレッド数 :6,300 ⽬標のスループットが 12.3 →多めの負 荷を検討 →15 page / sec ThinkTime(ミリ秒) :600,000 30 スレッド実施が限界のクライ アントが3台しか⽤意できない スレッド遅延 8,600ミリ秒 スレッド数 :30 * 3台 ThinkTime(ミリ秒) : 約 8,600 ターゲットスループット 210 リクエスト / 分 30 スレッド実施が限界のクライアントが3台 しか⽤意できない (15 page / sec) / (30 スレッド) / (10 page) * (70 Request) * (60sec) = 1台に設定するスループット = 210 リクエスト/ 分 49 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考:ログからスループット、レスポンスタイム曲線を算出する(例) ページごとのスループット、レスポンスタイム のグラフ化 :Excelやテキストファイル抽 出ツールを⽤いて算出を⾏う 同じリクエストが同じ秒台に発⽣している個数 を調べる (ピボットテーブルなど活⽤) 結果ファイル 分析したいペー ジごとに作成 飽和点 / 経過時間 (ユーザー暫時追加) 50 レスポンスタイム︵㍉秒︶ スループット ︵件 秒︶ スループット曲線 レスポンスタイム曲線 ⼈事部ページ (/appli01.nsf/xxxx) 経過時間 (秒) レスポンスタイ リクエスト発⽣回数 ム平均 (ミリ 個数 秒) (=スループット) 0:00:01 0.1 3 0:00:03 0.24 5 0:00:04 0.12 15 0.00:05 0.082 20 : : : 上記の表を元にグラフ化する *シナリオ全体のスループット :統計レポートのスループット 合計値(Request / 秒) * ページ数 / リクエスト数 で 求まる。 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 その他のTips 51 クライアント描画負荷を極⼒避けるために 「グラフィック無しモード」で実⾏す るには? コマンドラインから実⾏可能 (GUI無し) > jmeter.bat -n -t Test.jmx(テスト計画定義ファイル) -l log.csv(ログ 出⼒先) →「統計レポート」が確認できない…… →分散環境での実⾏もできない…… まだJMeterの動作が重い…… ⼀部のリスナーは⾮常に重いので、シナリオのデバッグ時のみに⽤いるべき 「グラフ表⽰」「結果をツリーで表⽰」 →「統計レポート」は重くならないのでお薦め JMeter⾃⾝のメモリチューニング項⽬がある 起動スクリプト($JMETER_HOME/bin/jmeter.bat)を編集 Javaヒープの⼤きさを⼤きくする 例) set HEAP=-Xms256m -Xmx256m 表記バグに注意。すでに使⽤が推奨されていないコントローラーなどもある 最新のバージョン、マニュアルを参照のこと © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 まとめ •Apache JMeter は⾮常に⾼機能な無償の負荷テストツールで、 Lotus Domino のWebアプリケーションのテスト要件にも充分 に応えることができる •しかし、以下のことは考慮すべき: •ツールの各要素の特徴や、独特のパフォーマンス指標の扱 いかたには慣れておく必要がある •出⼒機能(グラフ化など)が貧弱なのでデータの加⼯に⼯ 数がかかる → デバッグの⽀援能⼒は⾼いが、肝⼼のパフォーマンス テスト結果がリアルタイムで得られないことも ライセンスが調達できるのであれば、リアルタイ ムのレポーティング機能が充実しているIBM Rational Performance Tester の利⽤もお勧め 52 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考⽂献(1/2) Apache JMeter Userʻs Manual (コンポーネントリファレンスなど充実) http://jakarta.apache.org/jmeter/usermanual/index.html JMeter Distributed Testing Step-by-step (PDF) http://jakarta.apache.org/jmeter/usermanual/jmeter_distributed_testing_step_b y_step.pdf JMeterの基本 JMeter -TECHSCOREhttp://www.techscore.com/tech/ApacheJakarta/JMeter/1.html JMeterガイド http://wiki.livedoor.jp/susatadahiro/d/Index J2EEパフォーマンス管理の勘所 http://www.atmarkit.co.jp/fjava/rensai2/j2eeoprmng01/j2eeoprmng01.html nmon と nmon analyser http://www.ibm.com/systems/jp/power/techinfo/aix/nmon/ 53 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 参考⽂献(2/2) Domino 6:HTTP リクエストログの仕様について https://www.ibm.com/support/docview.wss?uid=swg21467436 Using Server.Load to evaluate and enhance IBM Lotus Domino server performance: http://www.ibm.com/developerworks/lotus/documentation/domino/d-lsserverload/index.html Dominoアプリケーションのパフォーマンスに関する考慮事項 (PDF) http://www.ibm.com/jp/support/redbooks/Lotus/SG88851100.pdf Lotus Notes/Domino 7 アプリケーションのパフォーマンス: 第2部:データベースの ビューの最適化 http://www.ibm.com/developerworks/jp/lotus/library/notes7-applicationperformance2/index.html Lotus Domino Webサーバーのパフォーマンス・チューニングと問題判別 http://www.ibm.com/developerworks/jp/lotus/ldd_tech/2010apr23_domino.html 54 © 2011 IBM Corporation JMeterを⽤いたLotus Domino Webアプリケーションのパフォーマンス計測 Questions? 55 © 2011 IBM Corporation