Jump to content 日本-日本語
日本HPホーム 製品 & サービス サポート & ドライバー ソリューション ご購入方法
≫  お問い合わせ

製品とサービス  >  ソフトウェアとOS >   HP-UX

Java™アプリケーションのプロファイリング

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
 
HP-UXシステム上で稼動するJava™アプリケーションのプロファイリングとパフォーマンスのモニタリングを行うツールは、フリーツール、市販製品、どちらも数多く提供されています。こうしたツールは、大きく2つのカテゴリに分類されます。
 
  • システムツール
    このカテゴリのツールは、汎用的に設計されているものです。Java専用ではありません。システムツールは、ネットワーク、システム、アプリケーションのパフォーマンスをモニタします。C/C++やFORTRANのアプリケーションについて詳細な情報を表示する機能を持っているものはあっても、Javaアプリケーションに関してはそうした情報は表示されません。これは、インタープリタで実行される、あるいはメモリ上でコンパイルされるというJavaの性質によるものです。システムツールは、通常、実行形式と呼ばれるファイルを必要としますが、Javaアプリケーションには存在しません。
  • Javaツール
    Java専用に設計されています。その多くは元々、HP-UX以外のプラットフォームをターゲットにしています。

システムツール


  • GlancePlus
    システムと実行中のアプリケーションに関する様々なパフォーマンス情報を提供する、GUIベースの構成可能なツールです。ネットワークについては、毎秒の転送パケット数やバイト数、エラー発生率が得られます。システムやプロセスについては、CPUとメモリ使用状況、ディスクI/Oの速度と量が得られます。また、仮想メモリ、スレッド、システムコールに関する情報も得られます。これは市販製品です。詳細は、GlancePlusのオフィシャルページをご覧ください。

  • netstat
    ネットワークのインタフェースとプロトコルの統計値を表示する、シンプルなコマンド行ツールです。パケットのトラフィック、接続、エラー発生率などを表示できます。詳細は、man netstatで表示されるmanページを参照してください。

  • top
    システム上で最もCPU使用率の高いプロセスを表示し、定期的に情報を更新するコマンド行ツールです。詳細は、man topで表示されるmanページを参照してください。

  • vmstat
    仮想メモリとCPUアクティビティの統計値をレポートするコマンド行ツールです。詳細は、man vmstatで表示されるmanページを参照してください。

  • sar
    CPU、I/O、コンテキストのスイッチング、割り込み、ページフォールトや他のカーネルアクションなど、システムの様々なアクティビティをレポートするコマンド行ツールです。詳細は、man sarで表示されるmanページを参照してください。

  • swapinfo
    デバイスとファイルシステムのページング空間についての情報を提供するコマンド行ツールです。詳細は、man swapinfoで表示されるmanページを参照してください。

Javaツール


HP-UXで使用できるJava専用ツールは、次の3グループに分類されます。

  1. デスクトッププロファイラ
    • Sitraka(旧KL Group)のJProbe
      このツールの正式名称はJProbe Suite ServerSide Editionです。これは、次の3つのコンポーネントからなります。
      • JProbe Profiler with Memory Debugger
        パフォーマンス上のボトルネックおよび時間のかかっているオブジェクトを検出します。
      • JProbe Threadalyzer
        デッドロックやレースコンディションの可能性を検出します。
      • JProbe Coverage
        テストされていないコードを識別し、そのコード量を測定します。
  2. Java VMトレーサ
    このグループには、Java VMのプロファイリンオプションが含まれます。 これらのオプションの詳細については『HP-UX用Java 2プログラマーズ ガイド』の第2章を参照ください。
    • -Xprof
      コールグラフの情報を提供しない、いわゆるフラットプロファイラです。個々のメソッドで費やした時間をサンプリングで推定します。インタープリタ、コンパイル済みのJavaコード、ネイティブコード、VMコードで費やされた時間も表示されます。
    • -Xeprof
      いわゆる拡張プロファイラで、HP-UX上でのJava専用に開発されたものです。使用可能なオプションは、java -Xeprof:helpで表示される記述を参照してください。
    • -Xverbosegc
      HP-UX上でのJava専用に開発されたガーベジコレクションのプロファイリング機能です。詳細は、java -Xverbosegc:helpで表示される記述を参照してください。
    • -Xrunhprof
      JavaSoftが提供するマルチプラットフォームのプロファイラです。オーバーヘッドが大きいため、Javaヒープのプロファイリングのみに使用することをお勧めします。使用可能なオプションは、java -Xrunhprof:helpで表示される記述を参照してください。
  3. モニタリングツール
上の3つのグループに含まれるツールは、それぞれ異なる特徴をもち、異なる目的で設計されています。下の表では、各グループから3つのツールを取り上げ、最も重要な機能について比較したものです。また、それぞれのツールが最も有効な開発ライフサイクルのフェーズを示します。

HP-UXのJavaプロファイリング ソリューションの比較
  jprobe
-xeprof
introscope
ライフサイクルの
フェーズ
開発
開発 と配置 本番
特徴
設計の評価
HP-UX HotSpot VMのチューニング
システム管理
テクノロジ
JVMPI VMの修正 バイトコードの修正
オーバーヘッド 〜1000% 〜100% 〜10%
特記事項
ほとんどのIDEと統合でき、開発プロセスでの使用も容易です。オーバーヘッドが大きく、実行中のシステムに顕著な影響があります。
実行中のアプリケーションについて、パフォーマンスに関するボトルネックを特定する目的で設計されています。オーバーヘッドが小さく、現実に即したパフォーマンスデータが提供されます。
複数の機器にまたがる、企業規模のアプリケーションをモニタリングする目的で設計されています。JProbeや-Xeprofを使用したより詳細な分析を、アプリケーションのどの部分に対して実行するべきかを判断するのに最適です。ほとんどの場合、測定されないほど小さいオーバーヘッドしか生じないため、通常のアプリケーション使用時に、常時実行しておくことができます。

JProbeは、広く使用されているデスクトッププロファイラで、洗練されたGUIを備えています。当初、Win32プラットフォームで作成されたものですが、プラットフォームに依存しない、ヘビーウェイトのJava Virtual Machine Profiling Interface (JVMPI)を使用しています。オーバーヘッドは非常に大きいのですが、開発初期に見られるパフォーマンスに関する問題を解決するのに適しています。細かい(ソースコードの行)単位でメトリックスを提供できますが、大規模なシステムへの適用には向きません。JProbeの目的は、プログラマが記述した状態のままで、Javaアプリケーションのパフォーマンスを調査することです。

拡張プロファイリング(-Xeprof)は、HP-UX専用のソリューションで、大規模なアプリケーションを扱い、複数のCPUに対応できるように設計されています。VMとPA-RISCプロセッサーとの緊密な統合により、JProbeと比較すると粗い(Javaメソッド単位)ながらも、桁違いに小さなオーバーヘッドで、より多くのメトリックスを提供します。ソースとの相関は提供されません。また、対話型のツールではありません。メトリックスを参照するには、Javaで記述した別のGUIツール、HPjmeterが必要です。拡張プロファイリングの目的は、HP-UX上のHotSpot VMで実行されている状態での、Javaアプリケーションのパフォーマンスの調査です。プロファイリング中は、コンパイラの最適化のほとんどは有効です。

Introscopeは、実際に稼働中のWebサイトをモニタリングする、Javaテクノロジベースのツールです。このツールは、アプリケーションをバイトコードのレベルで修正し、パフォーマンス計測用のプローブを挿入します。Introscopeは、リアルタイムのパフォーマンスデータを提供し、コンポーネント間の対話を表示します。大規模なシステムにも適用でき、同時に複数のサーバーをサポートします。アプリケーションが使用しているJavaメソッドから、小さなサブセットを慎重に選択すれば、低いオーバーヘッドで実行できます。これは多くの場合、モニタするアプリケーションに関する深い知識を必要とします。そのため、ベンダーがIBM WebSphere、BEA WebLogic、Sun iPlanet、Allaire Jrunなど一般的なJ2EEアプリケーションサーバーについての構成表を提供していますが、Introscopeのセットアップは簡単ではありません。Introscopeの目的は、通常のシステム稼働中に、パフォーマンスに関する問題を検出および診断することです。

プロファイリングによるオーバーヘッドは、実際のJavaコードに大きく依存します。上記の推計はSPEC JVM98ベンチマークを実行して得たものです。これはCPUを酷使し、プロファイラに対する要求も厳しいものです。典型的な、よくできたサーバーサイドJavaアプリケーションは、Javaのコードの実行には10%程度の時間しか使わないため(残りはネットワークとデータベースのI/O、ネイティブライブラリのコード、システムのアクティビティに使用されます)、プロファイリングの実際のオーバーヘッドは桁違いに小さなものになります。

プロファイリングツールの適合性
作業内容
jprobe
-xeprof
introscope
開発初期
(アーキテクチャ/アルゴリズムの検証)
XXX XX -
開発後期
(パフォーマンスについてのリエンジニアリング)
X XXX X
HP-UXへの移植
(プラットフォームに合わせたパフォーマンスのチューニング)
X XXX X
スケーラビリティとストレスのテスト - XXX XX
統合
(複数のサーバーのチューニング)
- XX XX
運用
(パフォーマンスのモニタリング)
- - XXX
メンテナンス
(パフォーマンスのレグレッションテスト)
- X -

どのツールを使うべきかは、開発/配置のどの段階であるかということと、アプリケーションの全体的な状況に依存します。ほとんどの場合、開発の初期段階と最初の実行には、シングルCPUのワークステーションが使われます。これは、配置対象とは異なる環境です。この段階のパフォーマンス測定は、デバッグと並行することが多くなります。JProbeは、アルゴリズムや、ヒープやスレッド使用状況の検証や測定など、そうした環境によく適合します。ただし、プロファイリングのオーバーヘッドが大きいため、パフォーマンスの問題が隠れてしまうことがあるほか、アプリケーションのスケーラビリティを検証することもできません。

あるJavaアプリケーションについて、シングルCPUのPCでうまく動作すれば、マルチCPUのサーバーへ自動的にスケールアップ(そして同じようにうまく動作)できるだろう、と考えるのは間違いです。ロックコンテンションやスレッドのスタベーションなどの新たな問題を考慮する必要があるうえ、VMのチューニングまでが影響します。また、マルチCPUシステムの場合は、ガーベジコレクションの影響も比例して大きくなります。この問題に対処するため、拡張プロファイリングはロックコンテンション、ガーベジコレクションの時間、CPUの利用状況を、個々のスレッドを使用して直接計測します。オーバーヘッドは低く、複数のCPUにも対応でき、Javaのコード最適化を禁止することもありません。HPjmeterは、連続運転中のパフォーマンス比較とプロファイラの影響の相殺をサポートしており、正確なパフォーマンス改善の検証と、詳細なチューニングが可能です。

対話型のフィードバックがなく、オーバーヘッドが大きいため、拡張プロファイリングは本番サイトでのモニタリングには使用できません。この目的には、Introscopeなど高度に特化したツールが適しています。複数サーバーのサポートと、トランザクションレベルでのシステムのモニタリングによって、断続的に発生するパフォーマンス上の問題を検出することができ、ネットワーク、データベース、サーブレットなど、原因となっているコンポーネントをピンポイントで特定できます。

Intuitive SystemsのOptimizeIt、Compuware NuMega LabのTrueTime、Rational SoftwareのVisual Quantifyなど、広く使われている市販のプロファイラは他にもありますが、現時点ではHP-UX上で使用することができません。また、これらは全てデスクトッププロファイラのグループに属します。

パフォーマンスの問題に関する、一般的なトラブルシューティングプロセス


次のツリー図は、ここで述べたツールを使用してより詳細レベルへと分析を繰り返し、パフォーマンスに影響を及ぼす根本原因を突き止めるプロセスを示します。
 
パフォーマンスの問題に関する、一般的なトラブルシューティングプロセス
印刷用画面へ
プライバシー ご利用条件・免責事項 ウェブマスターに連絡