Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
日本オラクル株式会社
コンサルティングサービス事業統括テクノロジーコンサルティング統括本部伊藤智博
Fusion Middleware事業統括本部ビジネス開発部新井庸介
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Oracle DBA & Developer Days 2014for your Skill
使える実践的なノウハウがここにある
#odddtky
オラクル・コンサルが語る!Java Flight Recorder活用のワザ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
3
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
アジェンダ
1
2
3
4
5
Java Flight Recorder 概要
Java Flight Recorder による問題解析
Java Flight Recorder のアーキテクチャ
まとめ
Java Flight Recorder による問題解析 2014
4
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
アジェンダ
1
2
3
4
5
Java Flight Recorder 概要
Java Flight Recorder による問題解析
Java Flight Recorder のアーキテクチャ
まとめ
Java Flight Recorder による問題解析 2014
5
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorder & Java Mission Control
• Java Flight Recorder– Oracle WebLogic Server, Java, およびアプリケーションの稼働詳細を自動記録
• Java Mission Control– Flight Recorder によるフライト記録をGUI解析
– 実行中のJavaの状況のリアルタイム監視
自動/手動ファイル出力
JVM
Java Webアプリ
Oracle WebLogic Server
Servlet
JavaVM
JDBC
Flight Recorder Mission Control
6
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
JVM Convergence: 製品の統合
Oracle Java
SE 8• JVM
Convergence
2013.9.11 2014.3.182011.7
Java SE 7
update 4HotRockit 1stリリース•診断コマンド
• Flight recorder(プロトタイプ)•GC改良 etc
2012.4
Project HotRockit
7
Oracle Java SE 7
update 40•Java Flight Recorder/
Java Mission Controletc
Sun Hotspot JVM特徴•多種のPlatformに対応•豊富な実績、多数のユーザー• Java SEコアAPI
BEA JRockit JVM特徴•高速(但しIntel 限定)•高い運用管理性:診断コマンド, Mission Control,
Flight recorder, Real-time, etc
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
アジェンダ
1
2
3
4
5
Java Flight Recorder 概要
Java Flight Recorder による問題解析
Java Flight Recorder のアーキテクチャ
まとめ
Java Flight Recorder による問題解析 2014
8
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
はじめに
Java Mission Controlを使ったフライト記録の解析
自動/手動ファイル出力
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
全般タブ
•全体的な情報の参照に使用
• CPU使用率、ヒープ使用率など
• JVMバージョン、コマンドライン引数、システムプロパティなど
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
メモリタブ
• OS, Heap使用量の時間的な推移
• GC処理の詳細– GC構成、GCタイプごとのGC
Timeなど
•ヒープ内のオブジェクト統計
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
コードタブ
• CPU利用率の高い処理の確認
•ホットメソッド(処理を費やした時間の高いメソッド)の一覧を表示
•メソッドコールのスタック・トレースを参照
•例外の発生状況を確認
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
スレッドタブ
•スレッドの稼働状況を確認
•ホットスレッドの参照
•競合やロック情報の参照
•待機時間– ロック待ち
– ファイル/ソケットIO待ち
•スレッドダンプ情報
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
IOタブ
•入出力に関する情報を参照可能
–ファイル
I/O(Read/Write)
–ソケット
I/O(Read/Write)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
イベントタブ
•イベント情報の参照
•参照するイベントの選択/絞り込み
•スレッドごとのイベントを時系列のグラフとして参照
–時間による範囲選択や絞り込みが可能
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorderで扱う”イベント”について
•イベント: Flight Recorderで記録される最小単位– イベント発生時刻、スタックトレース、イベント同士の関連情報などを併せて記録される
•イベントタイプ
1. 期間イベント• 開始時刻と終了時刻を持つ(例: GCイベント)
• 短期イベントは記録しないなどの設定が可能(例: 10msec以下のJava Sleepイベントは記録しない)
2. インスタントイベント• 期間を持たないイベント、開始時刻のみ持つ。Exceptionイベントなど
3. サンプリングイベント• 定期的に記録されるイベント。CPU使用率など。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
本題
Java Flight Recorder による問題解析
説明シナリオ
1. ランタイムの問題: 不定期に遅延が発生する
– “時々遅くなる”ケース
2. アプリケーションの問題: 出力されるはずのログが出ない
– アプリが期待と異なる挙動をするケース
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ケース1. 不定期に遅延が発生するアプリケーションと問題事象
負荷掛けサーバー
Application
Server
Oracle
Real Application
Clusters
負荷試験中に不定期に性能劣化
HotSpot HotSpot
該当時間帯にGCは発生していない
DB側も問題は見られず
レイテンシ
フライト記録を取得し調査
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
•特定のDBサーバーへのソケット読み取りのみ長時間かかっていることが分かった
•本来は4つのDBサーバーに同じだけの負荷がかかり、4つともに同等の結果となるはず
ソケット読取り
Java Flight Recorderの確認①
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
•こちらでも特定DBサーバーへのSocket Readが数秒と正常時と比べて明らかに遅いことが分かった
イベントグラフ
Java Flight Recorderの確認②
シナリオ3
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
原因と対応
•原因
– JFRから特定DBサーバーへの通信が遅くなることが分かった
–これをもとに、ネットワーク統計から、特定のDBサーバー1台に対する通信で、パケットの再送が多発していることを確認
•対応
–対象DBサーバーを外して再試験したところ、レイテンシのスパイクは見られず
–次に、対象DBサーバーのスイッチポートおよびEthernet ケーブルの変更をして再試験したところ、レイテンシのスパイクは見られず
–DBサーバーが接続していたポートおよびケーブルを精査したところ、ポートのコンバータ・モジュールの接触不良であることを特定
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ケース2. 出力されるはずのログが出ないアプリケーションと問題事象
アプリケーション
•データをバッチ処理するプログラム
•通常の結果出力とは別に、処理状況を別途ログ出力する
問題事象
•バッチ処理自体は正常終了するが、処理状況ログに期待した情報が出力されない
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
•処理をしてるpool-1-thread-1スレッドでJava Exceptionイベントが連続して多発している
•例外にも関わらずアプリケーション処理は正常終了していた
イベントグラフ
Java Flight Recorderの確認①
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
•例外の内容はFileNotFoundException
–書き込み権限に起因する模様
• 3rd Partyのロガーがスタックトレースに含まれている
イベントグラフ
Java Flight Recorderの確認②
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
• FileNotFoundExceptionの発生件数は60万回
例外
Java Flight Recorderの確認③
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
原因と対応
•原因
–ログの出力先に書込権限が無かったため3rd Party製ロガーは例外をthrowしたが、フレームワーク内のcatch句の中で握りつぶしていた
•対応
–例外をハンドルするようにコードを修正
3rd Partyロガー
FWバッチ
正常終了
3rd Partyロガー
FWバッチ
例外処理
適切な例外処理追加
例外 例外
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
• 例外の多発が解消
• アプリケーション内での例外処理漏れの場合、事象の把握や対応は非常に困難
• JFRを利用することでこうしたケースでも詳細を把握でき、要修正箇所を特定できる
解決
修正後再テスト
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
アジェンダ
1
2
3
4
5
Java Flight Recorder 概要
Java Flight Recorder による問題解析
Java Flight Recorder のアーキテクチャ
まとめ
Java Flight Recorder による問題解析 2014
28
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Oracle Java SE
OS
Java Flight Recorderアーキテクチャ概要
Java Mission Control
jcmd
ダンプ依頼/
ダンプ解析
ダンプ依頼
ダンプ(.jfr)
JFR engine
JFR API (jfr.dll、jfr.jar)
WebLogic
Server
イベント
イベントイベント
.jfr
イベントイベントイベント
User
Application
循環バッファ
Memory + Disk
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ヒープ外のメモリ
Java Flight Recorder:循環バッファ
•循環バッファ– Flight RecorderによりEventが記録される領域
– メモリ+ディスクの組み合わせで構成
•循環バッファの各エリア
– Thread Local Buffer• 各スレッドが持つローカルバッファ領域: 5KB/Thread
–Global Buffer• Thread Local Bufferから移行: 462,848 bytes (default)
–Disk File• Global Bufferから移行
• Chunk単位に分割格納: Max Chunk sise=12MB (default)
•循環バッファのサイズ設定– MaxSizeもしくはMaxAgeのどちらかを指定
Thread local Buffer
新しいデータ
あふれたら移動
あふれたら移動
ディスク
Global Buffer
循環バッファーイベント
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Oracle WebLogic Serverとの連携WebLogic診断フレームワーク(WLDF)との連携
• WebLogicの稼働情報をFlight Recorderでまとめて記録
•イベント内に、Servlet処理やJDBC処理に関するイベントが含まれる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Oracle WebLogic Serverとの連携
•記録例: Java EEレイヤーの処理詳細まで把握可能
Servlet
JDBC
Java
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Oracle WebLogic Serverとの連携設定
• WebLogic Serverの管理コンソールからフライト記録を設定
•記録するイベント量の制御も可能– ドメイン>環境>サーバ>構成>全般>診断ボリューム
– オフ、低、中、高のいずれかを指定(デフォルトは低)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
アジェンダ
1
2
3
4
5
Java Flight Recorder 概要
Java Flight Recorder による問題解析
Java Flight Recorder のアーキテクチャ
まとめ
Java Flight Recorder による問題解析 2014
34
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorderの差別化ポイントこれまでのトラブル対応手法との違い
•本番環境での常時記録を可能にする低負荷技術– JVMレベルの内部機構を利用した低負荷記録
•ダンプファイルによるオフライン分析– 無応答、ダウン、再起動の際の情報消失を防ぐ
– 障害時点の情報に加え、そこに至る履歴情報もまとめて出力
•既存環境への適用が容易– Oracle Java SE (JDEk/JRE)に付属
– 追加インストール不要
– アプリケーション改変不要
Javaプロファイラ
負荷: 高
情報量: 多
負荷: 低
情報量: 少
ログ、ダンプ等
Java Flight Recorder
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
サポートの観点からJava Flight Recorderが無い場合
GCの遅延が発生しました。Excelを送ります。
詳細を見たいのでGC logを送って頂けますでしょうか?GCログ探して整形or再現テストして取得
取得したGCログを送ります。○○で時間がかかっているようです。
詳細解析のためにヒープダンプとスレッドダンプを送って頂けますでしょうか?
探して整形or再現テストして取得
取得したファイルを送ります。
特に異常はないようです。JRockitのバージョンは何でしょうか?
○○です。
該当のバージョン、症状を鑑みたところ、既知バグを踏んでいる可能性があります。こちらのWAをご試行ください
確認作業複雑な手続き作業遅延→対応コスト増大
フィールドエンジニア
サポートエンジニア
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorderがある場合
GCの遅延が発生しました。JFRファイルを送ります。
JFRを確認し該当のバージョン、症状を鑑みたところ、既知バグを踏んでいる可能性があります。こちらのWAをご試行ください
解析作業
顧客担当者
サポートエンジニア
シンプルな手続き作業の迅速化→対応コスト低減
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
アジェンダ
1
2
3
4
5
Java Flight Recorder 概要
Java Flight Recorder による問題解析
Java Flight Recorder のアーキテクチャ
まとめ
Java Flight Recorder による問題解析 2014
38
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
フライト記録の開始
•フライト記録の開始方法は以下の3つ
–起動引数で指定
– jcmdコマンドで開始
–Mission Controlから開始• 次ページで説明
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:StartFlightRecording=duration=60s,filename=myrecording.jfr MyApp
jcmd <PID> JFR.start duration=60s filename=myrecording.jfr
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Mission Controlからフライト記録の開始
フライト記録開始
①JVMブラウザから対象のJVMを右クリック、フライト記録の開始を選択
②取得時間や、イベント設定などを選択
③オプションの指定 ④イベントの取得条件を変える場合は個々に変更
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
フライト記録のダンプ
•インメモリのフライト記録や任意の時間の記録を参照する場合は、ファイル(.jfr)へのダンプが必要
•フライト記録のダンプ契機
–自動ダンプ• 起動時に指定したフライト記録時間が終了した場合
• JVM終了時
• Triggerベース: Mission Control上でトリガーを設定
• WebLogic診断フレームワーク(WLDF)にて定義した監視ルールに基づくダンプ
–明示的なダンプ• jcmdコマンドによるダンプ( JFR.dump)
• Mission Controlからの手動ダンプ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 42
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |