Java Flight Recorderの紹介
日本オラクル株式会社 コンサルティングサービス事業統括 プリンシパルコンサルタント
伊藤 智博
Java Day Tokyo 2015 2015年4月8日
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
• 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
4
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。 文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
アジェンダ
はじめに
Java Flight Recorderを使った分析
従来の分析方法
これからの分析方法
まとめ
1
2
3
4
5
5
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
こんなことありませんか?
ある期間スローダウン
突然プログラムが終了
6
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
OS情報 •リソース
•プロセス
ログ •Java VMのログ
•アプリのログ
–問題点
•問題を事前に想定
7
どのように分析しますか?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
ダンプ •スレッドダンプ
•ヒープダンプ
–問題点
•タイミングが困難
プロファイラ •JavaVM情報
•実行メソッド情報
–問題点
•高負荷
8
どのように分析しますか?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
現状は?
取ってない
取れなかった
取らせてもらえない
9
情報を
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
“これからは、 Java Flight Recorderを ご利用ください”
11
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorder とは
障 害 分 析 ツ ー ル
12
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
アジェンダ
はじめに
Java Flight Recorderを使った分析
従来の分析方法
これからの分析方法
まとめ
1
2
3
4
5
13
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorderを使った分析
14
簡単 短縮 低負荷 簡単
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
記録 可視化
15
2つのツール
Java Mission Control Java Flight Recorder
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 16
タブ
タブ・グループ ヒープ 使用量
CPU 使用率
GC
時系列のCPU使用率
JavaVMのバージョン
Java Mission Control
ダッシュボード
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorderの起動
起動オプションをたった2つ追加
17
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorderを使った分析
18
簡単 短縮 低負荷
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java VM
19
プロファイラとJava Flight Recorderの比較
Java Flight Recorder
Java VM
JVMTI
プロファイラ
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
100
0
25
50
75
100
無効時
Java Flight Recorder 有無のパフォーマンス比較
100 98
0
25
50
75
100
無効時 有効時 20
%
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorderを使った分析
21
簡単 短縮 低負荷
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
従来のやり方
障害
分析
対応
再現待ち 障害
分析
対応
確認
22
システムの範囲
絞り込んだ範囲
原因
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 23
Java Flight Recorderで収集される情報
全般 メモリー コード スレッド
I/O システム イベント
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorder
バッファ
24
Java Flight Recorderの情報保持方法
情報 情報 情報 情報 情報
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
これからのやり方
25
障害
分析 対応
確認 解決までの時間を短縮!
システムの範囲
原因
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
アジェンダ
はじめに
Java Flight Recorderを使った分析
従来の分析方法
これからの分析方法
まとめ
1
2
3
4
5
26
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
分析
28
障害
分析
対応
確認 ログ収集 絞り込み ログ収集
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
ログを収集
様々なログを都度収集
•アクセスログ
•CPU使用率
•スレッドスタック
29
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
分析
30
障害
分析
対応
確認 ログ収集 絞り込み 絞り込み
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 31
スローダウン
CPU高騰 GC
オブジェクト生成
障害
分析 対応
確認 収
集 絞込
アーキテクチャ
ヒープ逼迫 ヒープ逼迫 GC CPU高騰
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 32
CPU使用率とヒープ使用率の分析
0%
20%
40%
60%
80%
100%
CPU ヒープ
GC多発 GC
オブジェクトを大量生成する処理
時間
使用率
使用量
(≒同時刻に処理時間の長い処理)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 33
スローダウン
CPU高騰 GC
オブジェクト生成
障害
分析 対応
確認 収
集 絞込
アーキテクチャ
ヒープ逼迫
EJB Servlet Java
アプリケーション
オブジェクト生成
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 34
アプリケーションの構成と分析方法
ユーザ
EJB
ログ出力
Servlet Java
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 35
呼び出し階層から時間の長い処理を特定する
ユーザ サーブレット3
サーブレット2
サーブレット4
サーブレット1
EJB B
EJB A
EJB C
EJB D
Java
Java
?
Java
Java
Java
Java
Java
Java
呼び出し 時間の掛かる呼び出し
障害
分析
対応
再現待ち
障害
分析
対応
再現待ち
障害
分析
対応
再現待ち
障害
分析
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
時間の掛かっている処理
分析 –=オブジェクトを大量生成 と予想
対応 –ログのコード追加
–再現待ち
–特定するまで繰り返す 36
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
アジェンダ
はじめに
Java Flight Recorderを使った分析
従来の分析方法
これからの分析方法
まとめ
1
2
3
4
5
37
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
分析
39
障害
分析
対応
確認 ログ収集 絞り込み ログ収集
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
ログを収集
Java Flight Recorderを取得する
40
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Mission Control の起動方法
Windows %JAVA_HOME%¥bin¥jmc.exe
Linux ${JAVA_HOME}/bin/jmc
41
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java Mission Control からのダンプ方法
42
JVMブラウザ フライト・レコーダ一覧
右クリック
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 44
JFRの記録範囲とスローダウン
安定稼働 スローダウン 安定稼働
ダンプ 起動
Java Flight Recorderの記録 消えた範囲
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
分析
45
障害
分析
対応
確認 ログ収集 絞り込み 絞り込み
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 46
スローダウン
CPU高騰 GC
オブジェクト生成
障害
分析 対応
確認 収
集 絞込
アーキテクチャ
ヒープ逼迫 CPU高騰
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 47
100%
60%
20%
ドラッグ クリック
OS プロセス
CPU使用率
時間
使用率
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 48
高負荷時のCPU使用率
100%
60%
20%
時間
使用率
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
スローダウン
CPU高騰 GC
オブジェクト生成
障害
分析 対応
確認 収
集 絞込
アーキテクチャ
ヒープ逼迫 GC
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
[メモリ]グループ [GC回数]タブ
50
GCの休止
メモリー
GC回数
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 51
300ms
200ms
100ms
GC
停止時間
GCが頻繁に実行
1回のGC
停止時間
GC間隔
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 52
スローダウン
CPU高騰 GC
オブジェクト生成
障害
分析 対応
確認 収
集 絞込
アーキテクチャ
ヒープ逼迫 ヒープ逼迫
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 53
メモリー
概要
メモリー使用状況
[メモリ]グループ [概要]タブ
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 54
64MB
ヒープ使用量
256MB
回収量
使用量 時間
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 55
スローダウン
CPU高騰 GC
オブジェクト生成
障害
分析 対応
確認 収
集 絞込
アーキテクチャ
ヒープ逼迫
EJB Servlet Java
アプリケーション
オブジェクト生成
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 56
Oracle WebLogic Serverの情報取得
アプリケーション
Java Flight Recorder
Java VM
OS
アプリケーション
Oracle WebLogic Server
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 57
アプリケーションの構成と分析方法
ユーザ
EJB Servlet
イベント収集
Java
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
イベントとは
•JFRが取得する情報
–イベントの例:
•スレッドロック待ちイベント
•例外発生イベント 58
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
[イベント]グループ [グラフ]タブ
59
イベント
イベント・タイプ
グラフ
イベント
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 60
イベントグラフとイベント
ディスク書込 待機 スレッド
2:10 2:00 2:40 2:50 3:00 2:20 2:30
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 61
イベントグラフとスレッド
スレッド1
EJB実行 スレッド2
待機 待機
2:10 2:00 2:40 2:50 3:00 2:20 2:30
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 62
複数階層のイベントグラフ
EJB実行
2:35 2:40 2:50 2:55
待機 通信
通信
2:45
WebLogic
Application
EJB実行の中で通信/待機している
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 63
障害
分析 対応
確認 収
集 絞込
EJB Servlet Java
スローダウン
CPU高騰 GC
オブジェクト生成 アーキテクチャ
ヒープ逼迫
アプリケーション
EJB Servlet
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 64
スローダウンを視覚的に確認
□ Servlet
実行時間が長期化
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 65
怪しいサーブレットのみを表示対象に設定
右クリック
操作セットに追加
□ Servlet
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
操作セットとは
•分析対象を追加した情報に絞る
•ユーザが自由に設定可能
•様々な情報を設定可能
66
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 67
怪しいサーブレットに関するイベント
長時間かかるEJB
□ Servlet □ EJB
Servlet
EJB
□操作セットのみを表示
スレッド名: [ACTIVE]ExecuteThread: ‘12’ for queue: ‘weblogic.kernel.Default(self-tuning)’
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 68
障害
分析 対応
確認 収
集 絞込
EJB Servlet Java
スローダウン
CPU高騰 GC
オブジェクト生成 アーキテクチャ
ヒープ逼迫
アプリケーション
EJB Servlet
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
[スレッド]グループ [ホット・スレッド]タブ
69
ホット・スレッド
ホット・メソッド
スレッド
ホット・スレッド
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 70
サンプルカウントの多いメソッドを確認
スタック・トレース パーセンテージ
Jdt2015.ejb.OrderHistoryEJB.createObject() 97.73%
スレッド パーセンテージ
[ACTIVE]ExecuteThread:’12’for queue: ‘weblogic.kernel.Default (self-tuning)’ 69.29%
ホット・スレッド
ホット・メソッド
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
時間の掛かっている処理
分析
createObject()メソッドが長期化
=オブジェクトを大量生成?
71
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 72
スローダウン
CPU高騰 GC
オブジェクト生成
障害
分析 対応
確認 収
集 絞込
アーキテクチャ
ヒープ逼迫
オブジェクト生成
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
[メモリ]グループ [割り当て]タブ
73
割当てプレッシャ
メモリー
割り当て
スタックトレース
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 74
割り当てプレッシャ
スタック・トレース パーセンテージ
Jdt2015.ejb.OrderHistoryEJB.createObject() 99.59%
スレッド パーセンテージ
[ACTIVE]ExecuteThread:’12’for queue: ‘weblogic.kernel.Default (self-tuning)’ 91.56%
割当てプレッシャ
スタックトレース
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
オブジェクトを大量に生成している処理
分析
大量のオブジェクト生成の原因解明
対応
createObject()を修正
75
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
アジェンダ
はじめに
Java Flight Recorderを使った分析
従来の分析方法
これからの分析方法
まとめ
1
2
3
4
5
76
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
まとめ
•JFRの利点
–簡単、低負荷、短縮
•実例で確認
–GUIによる簡単な分析
–再現待ちせず短期間で原因を解明
•Java Flight Recorderをお使い下さい
77
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
まとめ
• Java SE Development Kit 8 サンプルダウンロード – http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
– JDK Downloadページの Demos and Samples Downloadsよりダウンロード可能
• Java Flight Recorderランタイム ガイド – http://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/index.html
• javaコマンド – http://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/java.html
•トラブルシューティング・ガイド – http://docs.oracle.com/javase/jp/8/docs/technotes/guides/troubleshoot/tooldescr.html
78