JBuilder 2007によるJEEアプリケー
ションパフォーマンスチューニング

ボーランド株式会社 Developer Tools Group 高橋智宏
Copyright (C) 2007, CodeGear. 本文書の一部または全部の転載を禁止します。

2

講師紹介• 学生の時購入したTurboC++2ndからの熱狂的なボーランドファン• JDK1.0 の頃からずーーっと、Javaやってます• 長年にわたり「Java読書会」を運営– http://www.javareading.com/bof/

1

3

アジェンダ
• 問題のある JEE Webアプリケーション• JVMPI / JVMTI• 無償のツール Eclipse / TPTP
• Eclipseベースの JBuilder 2007
• OptimizeIt 2007 for Eclipse• OptimizeItを使った分析手順• EJB2.x,EJB3.0のビジュアル開発機能の紹介

4

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

2

5

問題のある JEE Webアプリケーション• Servlet,JSPの処理時間が長い• 例外が発生しているらしい!?
• JDBC等のリソースの解放処理がお粗末• HttpSessionの間違った使い方• メモリが延々と増加し続ける
さて、どうやって原因を見つけようか…

6

JVMPI / JVMTI• JavaVMの挙動を監視し、情報収集するためのインターフェース• .dll, .so等のライブラリ(エージェント)が必要
Javaプロセス
JavaVM

JVMPI
or
JVMTI

エージェント(xxx.dll)

独自プロトコル

モニタリングツール(一般的にはGUI)• ～ JDK1.5 まで– Java Virtual Machine Profiler Interface (JVMPI)• JDK1.5, JDK6 ～– Java Virtual Machine Tool Interface (JVMTI)3

7JVMPI / JVMTI（続き）• JVMPIやJVMTIを使うと– JavaVM内のメモリの使用状況を把握できる– 実行時間の測定が行える– 実行されたコードを測定できる– スレッドの状態を把握できる

8

無償のツール Eclipse / TPTP
• Eclipseには、JavaVMの解析に役立つオープンソースのプラットホームや、JVMPI/JVMTI準拠のツールが無償で用意されています• Test & Performance Tools Platform (TPTP)– URL: http://www.eclipse.org/tptp/– 共通プラットホーム– モニタリングツール– テストツール– トレースおよびプロファイリングツール

49

TPTPの仕組み• JVMPIのエージェントをサーバーに組み込む• モニタリングツールは、Eclipseに統合されたものを使用• Agent Controller がエージェントとモニタリングツール(GUI)を仲介
Javaプロセス
JavaVM

EclipseAgentController

エージェントGUI

同一ホストでの監視
Javaプロセス
JavaVM

エージェントEclipseAgentController

GUI

リモートホストから監視

10

TPTPを使ってみる• JBossの起動スクリプトに、piAgent.dllを組み込む• EclipseからJBossにアタッチ– フィルターの追加（「org.jboss.*」を「除外」）– 基本メモリー分析– 実行時間分析• メニューから［モニターの開始］

511

問題のあるJEE Webアプリケーションを動作させてみる• 実行時間分析– メソッド呼び出しの詳細– 細かすぎ。フィルターで「org.jboss.*」を「包含」すればかなり見やすくなる。

12

問題のあるJEE Webアプリケーションを動作させてみる• メモリー分析• オブジェクトの参照 – 遅くて、細か過ぎて、生成場所も特定できない

6

13

Eclipseベースの JBuilder 2007
• JBuilder 2007 は、Eclipse3.2をベースとした統合開発環境。IDEの最高峰「JBuilder 2006」の後継。
• JEE(Web,EJB2.x,EJB3.0等)のビジュアル開発– EJBワークベンチ– Webサービスデザイナ• チーム開発・プロジェクト管理の効率化– ProjectAssist– TeamInsight• TogetherによるUMLモデリング機能• OptimizeIt 2007 による分析&チューニング

14

OptimizeIt 2007 for Eclispe• OptimizeItシリーズは、2002年の「OptimizeIt 4」リリース以降、最も優れたJava用プロファイリングツール。
• Eclipse/TPTPに対応• JVMPI/JVMTIに対応– Memory Profiler, CPU Profiler, Quality Analyzer– Thread Debugger– Code Coverage– Request Analyzer（JEE専用）• 分析中のデータやVMの状態をスナップショットに丸ごと保存できる– 後からゆっくりと問題の分析が可能

7

15

Memory Porfiler• インスタンス数やオブジェクトの参照関係を把握– ある時点(マーク)からの差分だけを追跡可能– インスタンスの生成場所を特定可能– 解放されない原因となっている参照だけを表示可能– メモリリーク自動検出機能

16CPU Profiler• 指定した時間内の実行時間を把握– 様々な測定方法– スレッドごとに分析可能– ホットスポットとソースコードの対応付け

8

17Quality Analyzer• Javaアプリ内部の問題を監視– コンテナクラスやStringBufferの浪費を監視– スローされた例外をすべて検出– ガベコレやファイナライゼーションの異常検出

18

Thread Debugger• 各スレッドの状態を監視– 状態を過去に遡って分析– ロック(モニター)の把握– デッドロックの検出および分析

919

Code Coverage• 実行時に通過したソースコードに関する情報を収集

20

Request Analyzer• JEEアプリケーション特有のパフォーマンス問題の分析や品質問題の検出を支援– System Dashboard– Component Performance– Component Details– Quality Analyzer• 各種アプリケーションサーバーへの対応– WebLogic 9.2, 8.1.4– JBoss 4.0.5, 3.2.6– Tomcat 5.0, 5.5– その他の一般的なJ2EEサーバすべて

10

21

Request Analyzer
System Dashboard• JEEアプリケーション全体の処理時間を各レイヤごとに分けて表示

22Request Analyzer
Component Performance• アプリケーションのエントリポイントごとに、各レイヤが消費した時間を分析

11

23

Request Analyzer
Component Details• JEEの各レイヤ(例：JDBC)ごとに、処理時間を詳細に報告

24

Request Analyzer
Quality Analyzer• JEE特有の品質問題を実行時に検出

12

25

OptimizeItを使った分析手順• JBossの起動スクリプトにOptimizeItのエージェント(oii.dll)を組み込む(JVMPI or JVMTI)– フィルターの追加で、「org.jboss.*」を「Group」化• EclipseからJBossにアタッチ

26

EJB2.x,EJB3.0のビジュアル開発機能

13

27

従来のJBuilderプロジェクトのインポート

EJB2.x(XDoclet) or EJB3.0(Annotation)
EJB2.xプロジェクト

変換用ウィザード

28「EJB2.1」ビジュアル開発• 各種J2EEサーバへの対応• テーブルからエンティティBeanを自動生成• EJBの「モデル/ソースコード/Xdoclet」の完全同期

14

29

「EJB3.0」ビジュアル開発• 各種J2EEサーバへの対応• テーブルからエンティティBeanを自動生成• EJBの「モデル/ソースコード/アノテーション」の完全同期

30

Thank you15