Java Flight Recorderの紹介 at Java Day Tokyo 2015

81

Transcript of Java Flight Recorderの紹介 at Java Day Tokyo 2015

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. |

“もうこんな事で 苦労しなくても良いんです”

10

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. |

“○○のECサイトが遅い”

27

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. |

“○○のECサイトが遅い”

38

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. |

ダンプ後の画面例

43

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

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 79