<Insert Picture Here>
Copyright ©2012, Oracle. All rights reserved.
2
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。
また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことは できません。以下の事項は、マテリアルやコード、機能を提供することをコミットメン ト(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さ い。オラクル製品に関して記載されている機能の開発、リリースおよび時期につい ては、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright ©2012, Oracle. All rights reserved.
アジェンダ
JRockit Flight Recorderクイックレビュー
目的や仕組み
開始、終了方法
イベント、テンプレート
製品ライセンス(重要!)
JRockit Flight Recorderのユースケース(デモ)
課題1: ホットスポットを探す
課題2: レイテンシー調査
課題3: GCの調査
3
Copyright ©2012, Oracle. All rights reserved.
目標
JRockit Flight Recorderの目的、使用方法を理解し、デモを 通じて適用イメージを体感する。
ステップ1 (クイックレビュー)
JRokit JVM, JRockit Flight Recorder, イベント、テンプレート、Mission Controlの概要を理解する。
ステップ2
JRockit Flight Recorderのデモから活用イメージを体感
4
Copyright ©2012, Oracle. All rights reserved.
5
JRockit Flight Recorder クイックレビュー
目的や仕組み、記録の開始、終了方法
イベント、テンプレート
製品ライセンス(重要!)
Copyright ©2012, Oracle. All rights reserved.
JRockit JDKとは?
概要
Oracleが提供&サポートするJava SE完全準拠のJava開発・実行環境
サーバサイド用途専用に設計された高信頼性の JVM
※現在はクライアントサイド用途にも対応
Intel アーキテクチャ( Xeon, Itanium2 )へ最適化された業界最高速の JVM
※現在はSparc版も提供
歴史
1998 年 スウェーデン アピールバーチャルマシン より初版がリリース
2002 年 BEA が アピールバーチャルマシン を買収
2008 年 Oracle が BEA を買収
Java SE との互換性
java –version でベースとなる Java SE のバージョンを表示
JRockit JDKに含まれる各種ツール、ライブラリ(JRE等)は基本的にSun Java VMと同一だが、Java SEでは定義されていない部分(ネーティブコード 生成・最適化、メモリ管理、デッドロック検出、管理用コマンド、 GUI ベースの 監視ツール等)を固有実装
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
BEA JRockit(R) (build R27.6.5-32_o-121899-1.6.0_14-20091001-2107-windows-ia32, compiled mode)
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Oracle JRockit(R) (build R28.0.1-21-133393-1.6.0_20-20100512-2132-windows-ia32, compiled mode)
R27.6.5
R28.0.1
Copyright ©2012, Oracle. All rights reserved.
JRockitのコード生成戦略
プラットフォーム非依存性を損なわずに高速性を実現
バイトコードを1ステップずつ毎回解釈しながら実行するインタプリタ方 式は低速なのでもとより不採用
全バイトコードを事前にネーティブコード化するAOT(Ahead-of-time Compilation)方式はプラットフォーム間の移植性を損なうので不採用
サーバサイドで実行されるアプリケーションの特徴を考慮
大部分のロジックは静的であり、実行時に変更されることは稀である
同一のロジックが長時間に渡って繰り返し実行される
ネーティブコード生成・最適化のコストは、実行時に十分ペイ できると判断し、JRockitでは以下の方針を採用
初回実行時にネーティブコードを生成
実行時統計からのフィードバックをもとにネーティブコードをさらに最適 化
7
Copyright ©2012, Oracle. All rights reserved.
JRockitのGCモードの選択におけるトレードオフ
8
△動作モードの切替オーバヘッド有り
○指針のみ選択すれば自動チューニング
△GCログが見にくい
動的GC 静的GC
○動作モードの切替オーバヘッド無し
△モード選択とチューニングが必要
○GCログが見やすい
○オブジェクトの移動コストが低い
△短寿命オブジェクトが多い場合は不適
シングルスペースGC 世代別GC
△オブジェクトの移動のコストがやや高い
○短寿命オブジェクトが多い場合に最適
○GCによる停止時間が理論上最小
△スループットは若干低下する
コンカレントGC パラレルGC
△GCによるアプリの一時停止が発生する
○アプリのスループットは理論上最高
Copyright ©2012, Oracle. All rights reserved. 9 システム停止
Out of Memory
スローダウンコアダンプ
JVMクラッシュ
サーバログ
スレッドダンプ スタックスレッド
落ちた瞬間の情報のみ
ログに有益な情報が 出ているとは限らない
障害直前のダンプは大抵取れてない マシンクラッシュ
OSクラッシュ
現象 システム的原因 調査手段 問題点
アプリ不具合
ソースコード
メモリの利用状況と
GC発生状況が分かるのみ
運用担当者が見ても分からない
確固たる情 報が得られ ず、デバッ グログを仕 掛けたり、
推測による アプリ修正 をして再現 待ち
・・・迷宮入
GCログ り
GC頻発
障害パターンと調査方法(一般)
Copyright ©2012, Oracle. All rights reserved. 10 システム停止
Out of Memory
スローダウンコアダンプ
JVMクラッシュ
サーバログ
スレッドダンプ スタックスレッド
マシンクラッシュ
OSクラッシュ
現象 システム的原因 調査手段
アプリ不具合
ソースコード
調査に必要 な情報が Flight
Recorderで 既に取得で きているた め、速やか に問題を特 定し修正
GCログ GC頻発
JRo c ki t F lig ht Re c o rd e r
+
循環バッファ
障害パターンと調査手段(JFR利用時)
Copyright ©2012, Oracle. All rights reserved.
JRockit Flight Recorder + Mission Control Client JVMの挙動の常時記録と分析
独自の低負荷技術により本番環境での常時記録を実現
記録時のオーバヘッドは一般的に 2% 以下 記録した情報を自動ファイル出力
迅速な原因究明を支援する GUI ツール
ヒープメモリ利用率の増加傾向 ヒープメモリを占めるオブジェクトの割合と増加率
1. トラブルの確実な原因追究を 「遡って」 実施可能
2. 障害発生→改善のサイクルと手間を大きく短縮化
Copyright ©2012, Oracle. All rights reserved. 12
JRockit Flight Recorderの特長
JRockit R28 からの新機能
JVM の常時診断
JVM内の”循環バッファ”に診断データを保持
新しいデータが入ってくると、古いデータは破棄 される
JVM だけでなく、 WebLogic Server 、および
WebLogic Server 上のアプリからのイベントも常 時収集
低オーバヘッド( 0.5 ~ 2% )
JRockitの既存のカウンタを利用
JRockit Mission Control で分析
従来の JRMC Runtime Analyzer と Latency Analyzer 機能では不可能だった過去に遡っての 分析が可能に!
Flight Reco rding
New Data
Old Data
Time
Copyright ©2012, Oracle. All rights reserved. 13
JRockit JVM
Flight Recorder Runtime
循環バッファー Applicati
on
JRockit Mission Control WLDF
イベント イベント Applicati
on アプリ
Thread Buffer
Global Buffer
Disk File 新しいデータ
古いデータ