81

Java Flight Recorderの紹介 at Java Day Tokyo 2015

Embed Size (px)

Citation preview

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