目次


WebSphere Application Server Performance Tuning Toolkit の紹介

使いやすいツールキットを使用してアプリケーション・サーバー・インフラストラクチャーのパフォーマンス・ボトルネックを検出する

Comments

概要

パフォーマンス・チューニングは、アプリケーション・サーバーを持つあらゆる企業にとって不可欠な作業であり、IT に対する投資から最大の効果を得られるようにする上でも有効です。アプリケーション・サーバーのパフォーマンス・チューニングをすると、エンド・ユーザーが経験するアプリケーションの応答時間を最適化することに加え、アプリケーションが安全にサポートできる最大負荷も判断できるようになります。

WebSphere Application Server は、エンタープライズ JEE アプリケーションのインフラストラクチャーに不可欠なコンポーネントであり、このミドルウェアをチューニングすることは最高のパフォーマンスを実現する上で必ず必要になります。

このチュートリアルでは WebSphere Application Server の Performance Tuning Toolkit (以下 PTT とします) について紹介し、このツールキットを使用してパフォーマンスのボトルネックを明らかにする方法と WebSphere Application Server インフラストラクチャーをチューニングする方法について説明します。ここでは読者が WebSphere Application Server とパフォーマンス・テストの基本を理解していることを前提とします。

WebSphere Application Server のパフォーマンス・チューニングの詳細の説明に入る前に、木を見て森を見ないことにならないように、少し本題とは別の話をします。ミドルウェアのチューニングはあくまでも 一側面にすぎず、全ソフトウェア・スタック (オペレーティング・システム、アプリケーション、データベース、クライアントまたはブラウザーなど) のキャパシティー・プランニングおよびキャパシティー・チューニングとともに総体的に検討する必要があります。こうした最適なキャパシティーを確実にするための全体的な洞察を行う活動がパフォーマンス・エンジニアリングですが、その話題は別の機会に譲ることにします。

Performance Tuning Toolkit の紹介

WebSphere Application Server Performance Tuning Toolkit (PTT) は Eclipse ベースのインテリジェントなツールキットであり、WebSphere Application Server のパフォーマンス・チューニングを支援するために設計されています。PTT は WebSphere Application Server Performance Monitoring Infrastructure (PMI) からパフォーマンス関連のデータを収集し、構成可能なモニタリング・ダッシュボードにそのデータを表示します。また PTT には問題判別のためのツールも用意されています。

PTT の主なコンポーネントは以下のとおりです。

  • ユーザー・インターフェース: Eclipse Rich Client Platform フレームワークを使用して構築されています。
  • データ・コレクター: WebSphere Application Server の JMX API を使用してサーバーから PMI データを収集します。
  • イベント・プロセッサー: PMI データを処理します。イベント・プロセッサーは Drools ルール・エンジンを使用してモニター・ダッシュボードにアラートを生成します。またユーザーは Drools ルール・エンジンを使用して、ルールを作成することができるため、ユーザー独自のカスタム・アラートを作成することができます。
  • パーシスタンス・マネージャー: データをデータベースに永続化します。イベント・プロセッサーはパーシスタンス・マネージャーを使用して PMI イベントを変換し、データベースに格納します。

図 1 は PTT のさまざまなコンポーネントの概要を示しています。

図 1: WebSphere Application Server Performance Tuning Toolkit の技術的な概要
図 1: WebSphere Application Server Performance Tuning Toolkit の技術的な概要
図 1: WebSphere Application Server Performance Tuning Toolkit の技術的な概要

PTT には以下の機能があります。

  • エラーが発生すると即座に検出する:
    • サーバーをモニターし、さまざまなタイプの問題を検出します (サーブレットのエラー、トランザクションのロールバック、トランザクションのタイムアウト、JDBC 接続のタイムアウト、JCA 接続のエラー、スレッドのハングアップ、プロキシー・リクエストの失敗など)。
  • 潜在的な問題を検出する:
    • システムの状態の詳細をダッシュボードに表示します。
    • 事前に定義されたルールに従って異常な兆候を検出します。
  • パフォーマンス・チューニングのプロセスを迅速化する:
    • 一元化されたビューで、すべてのサーバーをチューニングすることができます。
    • ワークベンチ内でチューニング・スクリプトを実行することができます。
  • 以下のツールを提供することにより、問題判別を容易にする:
    • スレッド・ダンプとヒープ・ダンプを生成するツール
    • ランタイム・トレースを使用可能化するツール
    • 接続プールの内容を抽出するツール
  • データ処理とレポート:
    • レポートを生成します。
    • オンラインでもオフラインでも PMI データを分析することができます。

他のツールと比較した場合の PTT の利点

PTT には以下のような数多くの利点があります。

  • インストールするのも使用するのも簡単です。ダウンロード・イメージを解凍して、少し構成するだけで使用することができます。
  • フットプリントが小さく (約 250M)、他に何もインストールする必要がありません。
  • 他に影響を与えません。PTT はリモートで実行可能なため、アプリケーションに変更を加える必要はなく、アプリケーション・サーバーにエージェントをインストールする必要もありません。
  • WebSphere Application Server のパフォーマンスに与える影響は最小限です。(「Performance degradation metrics when using PMI」を参照してください。)
  • 使いやすく、ユーザー・インターフェースをカスタマイズすることができます。
  • 1 つのサーバーまたはセル全体を 1 ヶ所からリアルタイムでモニターすることができます。後で分析できるようにサーバーのパフォーマンス・チャートを保存することもできます。
  • ルール・ベースでイベントを処理します。また、ユーザーはプロジェクトの要件に応じてアラート・エンジンもカスタマイズすることができます。
  • 最後に、これも重要な利点として、PTT は無料です。

PTT と組み込みの Tivoli Performance Viewer

WebSphere Application Server には Tivoli Performance Viewer が組み込まれています。Tivoli Performance Viewer も PMI データを使用して WebSphere Application Server 全体の正常性を管理コンソールからモニターします。PTT は Tivoli Performance Viewer の機能に以下の特徴を加えることで構築されています。

  • 容易にモニターできるダッシュボード。このダッシュボードにより、WebSphere Application Server のパフォーマンスを容易に把握することができます。
  • アラート生成機能。パフォーマンスの問題を容易に検出することがでるようアラートを利用できます。これらのアラートはカスタマイズすることもできます。
  • ダンプやトレース情報の生成機能。これらの機能を利用して高度な問題判別をすることができます。

PTT では対応できないこと

PTT はシステム管理ツールではないため、長期にわたるシステムの監視に使用すべきではありません。PTT はパフォーマンス・テストを行う際に WebSphere Application Server を短期間モニターするためのものです。システムの監視には Tivoli シリーズの IBM 製品が適しています。「参考文献」を参照してください。

PTT ハンズオン

ツールについて学ぶための最も良い方法は、そのツールを使用してみることです。このチュートリアルでは、パフォーマンスにボトルネックがあるシナリオを再現し、これらの問題を PTT を使用して解決する方法について説明します。PTT は WebSphere Application Server クラスター全体をモニターすることができますが、このチュートリアルでは簡単にするために WebSphere Application Server の 1 インスタンスのみを扱います。また、標準的なパフォーマンスのサンプル・アプリケーションを WebSphere Application Server にインストールし、このアプリケーションにパフォーマンスのボトルネックを作り出した上で、PTT と他のツールを組み合わせて使用して、それらの問題を調べていきます。

この記事で必要なソフトウェア

  • PTT はパフォーマンスの問題を検出するための基本的なツールです。このツールキットをダウンロードしてインストールしてください。
  • DayTrader パフォーマンス・アプリケーションはオンラインの株式売買をモデル化したエンド・ツー・エンドのサンプル Web アプリケーションです。DayTrader は JEE コンポーネント (サーブレット、JSP ファイル、エンタープライズ Bean、MDB (Message-Driven Bean)、JDBC (Java Database Connectivity) など) を利用することにより、一連のユーザー・サービス (ログイン/ログアウト、株価情報、売り、買い、口座の詳細など) を HTTP および Web サービス・プロトコル上で提供します。DayTrader には構成可能なパラメーターがあり、それらをパフォーマンスのボトルネックを作り出すために使用することができます。DayTrader パフォーマンス・アプリケーションの詳細については「参考文献」を参照してください。DayTrader アプリケーションを 1 つのサーバー・インスタンスにインストールするためのスクリプトは「ダウンロード」セクションから入手することができます。
  • Apache JMeter 負荷テスト・ツールは、機能の動作の負荷テストとパフォーマンスの測定を実行するために設計されています。このツールを使用して DayTrader アプリケーションに対するリクエストをシミュレートします。このツールのインストール・イメージについては「参考文献」を参照してください。
  • IBM Support Assistant 5 Tech Preview を問題判別のために使用します。このツールには、問題判別の調査のためのデータを収集する Case Manager と、問題を診断するための一連のツールが含まれています。IBM Support Assistant の入手方法については「参考文献」を参照してください。

セットアップ

  1. インストール用のアーカイブを解凍して PTT をインストールし、実行ファイルを実行すると、図 2 のワークベンチが表示されます。
図 2: Performance Tuning Toolkit のワークベンチ
図 2: Performance Tuning Toolkit のワークベンチ
図 2: Performance Tuning Toolkit のワークベンチ
  1. PTT を構成するためにはホストを追加する必要があります。「Hosts (ホスト)」ペインのツールバーの「Add a new Host (新規ホストの追加)」ボタンをクリックします。「New Host (新規ホスト)」ウィンドウ (図 3) で、WebSphere Application Server ND (Network Deployment) をインストールする場合には、デプロイメント・マネージャーの IP アドレスと SOAP ポートを指定します。単体サーバー環境の場合はそのサーバーの IP アドレスと SOAP ポートを指定します。セキュリティーが有効になっている場合には、ユーザー名とパスワードも指定する必要があります。
図 3: 新規ホストを追加する
図 3: 新規ホストを追加する
図 3: 新規ホストを追加する
  1. DayTrader アプリケーションをインストールするには、PTT のワークベンチのメニュー・バーから「Help (ヘルプ)」 -> 「Case Study (ケース・スタディー)」の順に選択し、サンプル・アプリケーションとスクリプト・ファイルを「Script (スクリプト)」ビューにインポートします。これらのサンプル・スクリプトはクラスター環境用です。単体サーバー構成の場合には別にスクリプトが必要であり、このチュートリアルの「ダウンロード」セクションから入手することができます。ダウンロードしたアーカイブからこれらのスクリプトを <PTT インストール・パス>/workspace/Scripts/sample フォルダーへコピーします。
  2. この sample フォルダーの中にある settings_SingleServer.py を開き、ノード名を各自の環境のノード名に変更します。また、WebSphere Application Server のセキュリティーが有効になっている場合には、セキュリティーの詳細を入力する必要があります。「Hosts (ホスト)」ビューでホストを選択し、「Script (スクリプト)」ビューの sample フォルダーの中にある installDaytrader_singleServer.py を右クリックし、コンテキスト・メニューで「Run Scripts (スクリプトの実行)」を選択し、サーバーに対してスクリプトを実行します。このスクリプトは必要な構成をすべて実行し、指定されたサーバーに DayTrader アプリケーションをインストールします。

PTT の「Log Console (ログ・コンソール)」(図 4) は DayTrader アプリケーションが適切にインストールされたことを示しています。

図 4: ログ・コンソールに DayTrader のデプロイメント・ログが表示されている様子
図 4: ログ・コンソールに DayTrader のデプロイメント・ログが表示されている様子
図 4: ログ・コンソールに DayTrader のデプロイメント・ログが表示されている様子

サーバーに対する冗長ガーベッジ・コレクションを必ずオンにしてください。ガーベッジ・コレクションはアプリケーション・サーバーの管理コンソールで有効にすることができます。サーバーを選択して「Process definition (プロセス定義)」をクリックし、「Java Virtual Machine (Java 仮想マシン)」をクリックします (図 5)。

図 5: サーバーに対するガーベッジ・コレクションを有効にする
図 5: サーバーに対するガーベッジ・コレクションを有効にする
図 5: サーバーに対するガーベッジ・コレクションを有効にする

アプリケーション・サーバーを再起動し、インストールが適切に行われたことを確認するために、以下にアクセスして DayTrader アプリケーションを開きます。

http://<ホスト名>:<デフォルト・ポート番号>/daytrader/scenario (図 6)

図 6: DayTrader のホーム画面
図 6: DayTrader のホーム画面
図 6: DayTrader のホーム画面

JMeter ツールを使用して DayTrader アプリケーションに対するリクエストをシミュレートします。JMeter を起動し、「Script (スクリプト)」ペインの sample フォルダーで daytrader.jmx ファイルを開きます。「hostname (ホスト名)」変数と「portnumber (ポート番号)」変数の値を皆さんの環境に合わせて変更します。

図 7: JMeter の構成画面
図 7: JMeter の構成画面
図 7: JMeter の構成画面

構成を確認するために、JMeter ツールを 10 分間実行し、JMeter ツールが DayTrader アプリケーションを処理できることを確認します。このテストにより、環境が適切にセットアップされていることも確認することができます。

IBM Support Assistant を起動するには ISA5/start_isa.bat を使用してサーバーを起動します。URL に http://localhost:<ポート番号>/isa5/ を指定すると、このファイルにアクセスすることができます。ポート番号はstart_isa.bat バッチ・ファイルを実行すると出力として表示されます。

これで、このチュートリアルに必要なセットアップは完了です。

PTT のワークベンチ

必要なソフトウェアがすべてインストールされ、構成できたので、PTT ツールを詳細に調べてみましょう。PTT のユーザー・インターフェースは簡潔かつ論理的に情報を表示するビューで構成されています。下記の図 8 は「Overview (概要)」画面の例を示しています。

図 8: PTT のワークベンチの「Overview (概要)」画面
図 8: PTT のワークベンチの「Overview (概要)」画面
図 8: PTT のワークベンチの「Overview (概要)」画面

この画面にサーバーの概要の情報が表示されていることに注目してください。ダッシュボードを表示するために、「Overview (概要)」画面の「Open Monitor Page (モニター・ページを開く)」ボタンをクリックします。

図 9: PTT のダッシュボードd
図 9: PTT のダッシュボードd
図 9: PTT のダッシュボードd

パフォーマンスの問題のシナリオ

PTT を使用することで、以下のような原因によるパフォーマンスのさまざまな問題を解決することができます。

  • 同期処理によるブロッキング
  • デッドロック
  • 高い CPU 使用率
  • 接続リーク
  • メモリー・リーク

同期処理によるブロッキングの問題

このシナリオでは、同期処理によってスレッドがブロックされます。数秒間スリープするstaticなsynchronizedメソッドを、アプリケーションは繰返し呼び出します。

このシナリオを含むようDayTrader アプリケーションに加えられる変更の例を、以下に示します。

// For Synchronization Blocking
if(TradeConfig.isThreadHang()){
  syncMethod();
}

public static synchronized void syncMethod(){
  try {
    Thread.sleep(TradeConfig.getHangTime());
  } catch (InterruptedException e) {
     e.printStackTrace();
  }
}

この問題をシミュレートするために、JMeter の負荷プログラムが実行されていること、そして PTT がサーバーをモニターしていることを確認します。DayTrader ページ (http://<ホスト名>:<ポート番号>/daytrader) の「Sever (サーバー)」タブを開きます。エラー再現のための設定項目を図 10 に示します。同期処理によるブロッキングの問題を発生させるために、「Sever (サーバー)」タブで「Synchronization Blocking (同期によるブロッキング)」チェック・ボックスを選択し、ランタイムの構成を更新します。

図 10: DayTrader の構成画面
図 10: DayTrader の構成画面
図 10: DayTrader の構成画面

数分で、図 11 に示す問題が発生し始めます。

図 11: 「Overview (概要)」画面に問題が表示されている様子
図 11: 「Overview (概要)」画面に問題が表示されている様子
図 11: 「Overview (概要)」画面に問題が表示されている様子

ダッシュボード・モニターを開くと (図 12)、アラートと、サーブレットの応答時間が悪化している様子が表示されます。

図 12: PTT のダッシュボードに問題の詳細が表示されている様子
図 12: PTT のダッシュボードに問題の詳細が表示されている様子
図 12: PTT のダッシュボードに問題の詳細が表示されている様子

この問題をさらに調べるためには、なぜサーブレットの応答時間が増大しているのかを判断する必要があります。Java では、デバッグ・モードに切り換えずにランタイム・プロセスの詳細情報を取得するために、スレッド・ダンプを使用することができます。スレッド・ダンプは基本的に、ある瞬間に JVM (Java Virtual Machine) 内部で実行されているすべてのスレッドのスナップショットです。スレッド・ダンプを使用することによって問題についてより詳しく理解することができます。スレッド・ダンプは、その時点の Java スレッドのスタック・トレースと、その時点で実行されているメソッドやコード行を表示します。スレッド・ダンプを表示するには、「Topology (トポロジー)」ペインでサーブレットを右クリックし、「Generate Thread Dump (スレッド・ダンプの生成)」を選択します (図 13)。

図 13: PTT のワークベンチを使用してスレッド・ダンプを生成する
図 13: PTT のワークベンチを使用してスレッド・ダンプを生成する
図 13: PTT のワークベンチを使用してスレッド・ダンプを生成する

スレッド・ダンプは(デフォルトでは)サーバーのプロファイルのルート・フォルダーの中に生成されます。このファイルは IBM Support Assistant の Thread and Monitor Dump Analyzer を使用して分析することができます。IBM Support Assistant 上でケースを1つ作成してこのスレッド・ダンプ・ファイルをインポートし、Thread and Monitor Dump Analyzer ツールを使用してこのファイルを分析します (図 14)。その分析結果を確認することで問題をさらに絞り込むことができます。javacore.xxxx_jca.html ファイルには詳細な結果が含まれています (図 15)。

図 14: IBM Support Assistant の「Java Thread and Monitor Dump Analysis (Java スレッドおよびモニター・ダンプの分析)」画面
図 14: IBM Support Assistant の「Java Thread and Monitor Dump Analysis (Java スレッドおよびモニター・ダンプの分析)」画面
図 14: IBM Support Assistant の「Java Thread and Monitor Dump Analysis (Java スレッドおよびモニター・ダンプの分析)」画面

Java Monitor Dumpファイルへのリンクをクリックすると、さらに詳細な内容を確認することができます。

図 15: IBM Support Assistant による詳細なモニター・ダンプの分析
図 15: IBM Support Assistant による詳細なモニター・ダンプの分析
図 15: IBM Support Assistant による詳細なモニター・ダンプの分析

ダンプにより、問題とその問題の原因のコードが明確になっていることに注目してください。

まとめ

ミドルウェア・インフラストラクチャーを最適に利用するためには WebSphere Application Server のチューニングが不可欠です。WebSphere Application Server Performance Tuning Toolkit を使用することで、パフォーマンスのボトルネックを容易に検出したり、さらには WebSphere Application Server インフラストラクチャーを容易にチューニングしたりすることができます。PTT は使いやすく構成も容易な各種機能を備えているため、PTT によって容易に問題を判別することができます。このチュートリアルでは PTT の機能と利点について説明するとともに、PTT のさまざまなコンポーネントについて簡単に説明しました。さらに、パフォーマンスの問題の例を挙げ、PTT を使用してその問題を解決する方法を説明しました。このチュートリアルの第 2 回では、他のシナリオに PTT を使用する方法について説明します。

謝辞

この記事を校閲くださった Peng Fei Sui 氏に感謝いたします。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=932562
ArticleTitle=WebSphere Application Server Performance Tuning Toolkit の紹介
publish-date=06102013