38
<Insert Picture Here> 高速JVM Oracle JRockitの全貌 入門編

高速JVM Oracle JRockitの全貌 入門編

Embed Size (px)

DESCRIPTION

高性能JVM「Oracle JRockit」について、内部動作、チューニング手法、お勧め機能「JRockit Flight Recorder」まで幅広くご紹介します。またJava SEの最新トピックについても含まれます。

Citation preview

Page 1: 高速JVM Oracle JRockitの全貌 入門編

<Insert Picture Here>

高速JVM Oracle JRockitの全貌入門編

Page 2: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.3

Agenda

Oracle JRockitとは

Oracle JRockitの内部動作について

Oracle JRockitの性能分析、障害解析機能について

Page 4: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.4

Oracle JRockitWebLogic Serverを構成する重要コンポーネント

• オラクルが提供しサポートする、Java SE完全準拠のServer JVM

x86/x64に最適化した業界最速のJVM(現在はSPARC版も提供)

安定性を保証するヒープメモリ管理

1998年 Ver.1リリースから12年の利用実績

GC処理の制御

突発的な処理遅延の防止

安定した挙動を実現

SPECjbb2005Last updated: Jun. 3 2010

9611262

Oracle

JRockitItanium/Linux

6972897

Oracle JRockit

Xeon X5570/Linux

5534233

Oracle

JRockitAMD Opteron

8384/Linux

5210501

IBM

J9 JVMPower/AIX

世界最高値

業界最速 安定性

レスポンスタイム(m

s)

100

150

200

250

300

100

150

200

250

300

Oracle JRockitReal time

通常JVM

Page 5: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.5

クライアントサイドでのJavaの利用とは異なった特徴と要求

• 特徴• マルチプロセッサマシンでの利用

• 長時間稼動

• 大きなメモリヒープサイズ

• Synchronizationの多用

• 動的なクラスローディングの多発

• 小さい単位の処理を多くのスレッドで並行実行

• ソケット通信やファイルI/Oの多用

• 要求• 高信頼性

• 可用性/管理性

• 拡張性

• 性能

JRockit の特長 - The Server Side Java VM -サーバサイドJavaの特徴と要求

Page 6: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.6

JRockit の特長 - The Server Side Java VM -Java VM処理の比重

TM

IO

R

CG

MM

CG

R

TMMM

クライアント サーバ

CG = Code Generation

MM = Memory Management

TM = Thread Management

I/O

R = Reflection

クライアントとは異なるサーバサイドの処理要求に特化したJava VMが必要

Page 7: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.7

Agenda

Oracle JRockitとは

Oracle JRockitの内部動作について

Oracle JRockitの性能分析、障害解析機能について

Page 8: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.8

そもそも、JVMとは?

Solaris WindowsLinuxHP-UX AIX

Any Hardware

JVM JVM JVM JVM JVM

バイトコード

Java

JVM(Java Virtual Machine)・・・Javaプログラムの実行環境-バイトコードを1行ずつ機械語(Native code)に変換し実行-各OSの機能を覆い隠す役割も担う

ハードウェア

OS

ランタイム

中間コード

ソースコード

コンパイル

配布・実行

Page 9: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.9

JRockit アーキテクチャ ~ネーティブコード生成~

Sun JVMの場合• バイトコードのままインタープリタで実行

• メソッドの実行回数を常時監視

• 実行回数が閾値(-XX:CompileThreshold)を超えたメソッドをコンパイルしてネーティブコードを生成

JRockitの場合① 各メソッドの初回実行時にバイトコードをJITコンパイルしてネーティブコードを生成

② バックグランドで動くサンプルスレッドが定期的にアプリケーション・スレッドの状態を監視し、頻繁に使用されているメソッドをリストアップ

③ まだ最適化されていないメソッドのうちで最も使用頻度が高いメソッドをより高速なネーティブコードへ最適化

bytecode

JITコンパイルnativecode

nativecode+

アプリスレッド監視

最適化

②③

bytecode

nativecode

メソッド実行

回数監視

コンパイル

②③

ネーティブ実行 ネーティブ実行

インタプリタ実行 ネーティブ実行

Page 10: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.10

コード最適化を示す例

最適化されたコードでは、クラス A を実行するたびにクラス B を実行する必要がない

Page 11: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.11

JRockit アーキテクチャ ~スレッドローカルエリア(TLA)~

• TLAが無いと ・・・ 各スレッドはオブジェクトをアロケートするたびにヒープのロックを得る必要があるので遅い

• TLAが有れば ・・・ 各スレッドの専用エリアにオブジェクトをアロケートできるので速い(もちろんアロケート済みオブジェクトは他スレッドからも利用可能)

Thread 1 Thread 2 Thread 3

Heap lock

a = new Object(); c = new Object();b = new Object();

Thread 1 Thread 2 Thread 3

a = new Object(); c = new Object();b = new Object();

TLA for

Thread 1

TLA for

Thread 2

TLA for

Thread 3TLA for

Thread 1

Heap lock

Page 12: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.12

JRockit アーキテクチャ ~メモリレイアウト~

Javaの「オブジェクト」はSun JVMでもJRockitでもヒープに置かれる

Javaの「クラス」はSun JVMではPermanent領域、 JRockitではNative領域に置かれる

JRockitではSun JVMにおけるSurvivor(From&To)に相当する領域は無く、NurseryがフルになるとOldにすぐに昇格する

よって、JRockitでは、初回GCで生き残ったオブジェクトは全て以降はFull GCのチェック対象になるが、Full GCが発生しても問題ないような様々な工夫がされている

JRockitでは高速化等を目的にSun JVMには無い様々な情報がNative領域に置かれる

OldNursery

OldEden Survivor

ToFrom

Xmn

Sun JVMの場合

Xmx/XmsXns

Xmx/Xms

-XX:PermSize

-XX:MaxPermSize

Native

Nativ

e

Perm

anent

JRockitの場合

ヒープ

ヒープ

0 1

0 1 32

1回でプロモーション

最大32回でプロモーション

New

Page 13: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.13

Parallel GCとConcurrent GC

Parallel Concurrent従来のGC

STOP-THE-World!!

STOP-THE-

World!!

従来のGCでは、GCを一つのスレッドで実行し、その間アプリケーションスレッドは停止(STOP-THE-WORLD)していました。そのためマルチCPUマシンでGCの間待機するCPUが存在しスループットが低下する原因となりました。これへの対策が、GCを複数スレッドで実行するパラレルGC、アプリケーションを止めずにGCを1スレッドで実行するコンカレントGCです

CPUに処理が割り当てられず性能が低下

ご参考

Page 14: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.14

JRockit ガーベッジ・コレクション① Parallel Garbage Collection (for New GC and Old

GC)

JVMは1CPUあたり1GCスレッドを並列に使用して一気にGCを行う。GCの間はアプリケーションスレッドは完全に止まるが、トータルでのアプリケーションのスループットは最も高くなる。

Java

application

threads

Garbage Collector

threads

Page 15: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.15

JRockit ガーベッジ・コレクション② Mostly Concurrent Garbage Collection (for Old GC)

1つのGC専用のスレッドがGC処理のほとんどのフェーズをアプリケーションと同時に行う。GC中のアプリケーションのスループットは落ちるものの、停止は避けられる。

Java

application

threads

Garbage Collector

thread

GCスレッドがヒープ内のオブジェクトの移動と削除を行うときのみ、短時間アプリケーションスレッドが止まる。

Page 16: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.16

JRockit アーキテクチャ ~ガーベッジ・コレクション~ガーベッジ・コレクション方式の指定方法

動的GC重視する指針のみを指定し、GCアルゴリズムについてはJRockitが内部で最適な組み合わせを動的に選択

重視する指針 指定方法

アプリケーションのスループット

(デフォルト)-XgcPrio:throughput

個々のGCポーズタイムの短縮

-XgcPrio:pausetime -XpauseTarget=<n>ms

アプリのレスポンスタイム(JRockit Real Timeでのみ利

用可能)

-XgcPrio:deterministic -XpauseTarget=<n>ms

Page 17: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.17

0

15

30

45

60

75

90

105

120

0 2000 4000 6000 8000 10000 12000 14000 16000 18000

JRockit Real Time

0

15

30

45

60

75

90

105

120

0 2000 4000 6000 8000 10000 12000 14000 16000 18000

低トランザクション時:GCによる一部タイムアウトが発生しうる

高トランザクション時: GCによる停止により、レスポンスタイムが劣化する

0

15

30

45

60

75

90

105

120

0 2000 4000 6000 8000 10000 12000 14000 16000 18000

従来のJavaでは困難だった予測可能なレスポンスを実現

従来のJava

JRockit Real Timeは、Deterministic GCにより、GC停止時間を抑制→ 安定したレスポンスを提供アプリケーションに手を入れる必要なし

JRockit Real Time

Page 18: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.18

Deterministic GC - JRockit Real Time

Mostly Concurrent GC をさらに改善1世代ヒープ(NurseryとOld間の参照や移動のコストを削減)個々のPauseTimeの制限付け(-XpauseTarget=XXms)

ただし、あくまで努力目標。アプリ特性とヒープ設定によっては守れないことも。

アプリスレッドを止めなければならないGCのフェーズをパラレル化オブジェクトの生成速度を随時観察し、GCのスケジュールを最適化

例) ヒープ全体を一度にGCするのではなく、複数回の短いGCに分割例) ヒープが一杯になる前に早めにGCを開始例)開始したGCが予定時間内に終わりそうにない場合に、

一旦GCを中止し、可能なら残作業を次回GCに繰り越し

Java

application

threads

Garbage Collector

threads

Page 19: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.19

JRockit動的GCアルゴリズム別性能比較

スループット

レスポンス

ポーズタイム

Deterministic GCポーズタイム優先GCスループット優先GC

Page 20: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.20

Agenda

Oracle JRockitとは

Oracle JRockitの内部動作について

Oracle JRockitの性能分析、障害解析機能について

Page 21: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.21

JRockit Mission ControlJRockit 専用のGUI ベースの運用監視ツール TCP/IP ベースのプロトコルでリモートのJRockitプロセスの運用監視が可能

監視されるJRockit側は以下のオプションでポートを開けるだけ(エージェント等のインストール不要)例: -Xmanagement:port=7091,ssl=false,authenticate=false

機能一覧 Management Console: CPU 使用率、ヒープ使用状況、スレッド使用状況、MBean監視

Memory Leak Detector: 迅速なメモリリーク検出、オブジェクトの参照関係の階層表示

JRockit Flight Recorder: GC 詳細情報、ホットパッケージ、ホットメソッド情報

Page 22: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.22

Management Console稼動中のJVMを監視するコックピット

• リソースの使用状況を把握して性能劣化の原因を探る• CPU使用状況、メモリ使用状況(JVM/Machine)をグラフ表示

• 任意のMBean情報の閲覧、更新、グラフ化、トリガ・アラートの設定

• スレッド情報(スタックトレース、CPUビジー、デッドロック有無)の確認

• メソッドプロファイリング

監視対象に与えるオーバーヘッドは軽微

Page 23: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.23

Memory Leak Detector動的なヒープ診断によるメモリリーク検出

• メモリリークの原因となるオブジェクトの特定• サンプル中のオブジェクト増加数、サイズ、インスタンス数、ヒープ中の割合

• 各オブジェクトを参照しているオブジェクトスタックを階層的に表示

• 統計情報の取得・監視によるオーバーヘッドは軽微• GCのマーク・フェーズを巧みに利用してヒープ上のクラス別メモリの統計情報を取得

旧来のヒープダンプ採取方式に比べて飛躍的に軽快

Page 24: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.24

Javaアプリケーションの性能問題の分析Management ConsoleによるJVM稼動状況の可視化

• 稼動状況をリアルタイムに可視化するJVMコックピット

任意のJVMプロファイルを選択して可視化

ダイヤル/グラフ形式でのスタイル表示

頻繁に参照するプロファイルを用途に合わせてダッシュボード化

Page 25: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.25

• メソッド/スレッドプロファイリングにより処理負荷傾向を検出

Javaアプリケーションの性能問題の分析Management Consoleによる稼動状況JVMの可視化

プロファイリング対象メソッドを任意に指定してメソッドあたりの処理占有時間を把握

スタックトレースから処理内容を把握

メソッドプロファイリングを開始してメソッド毎の実行時間を計測

各スレッドのCPU使用率やデッドロック検出によりスレッドのリソース利用状況を把握

Page 26: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.26

Javaアプリケーションの性能問題の分析Memory Leak Detectorによるメモリリーク検出

• 増加傾向の高いオブジェクトをメモリリークと推定

• 増え続けるオブジェクト= 解放よりも割り当ての方が多い

• 明示的にGCを実施してヒープ使用の増加傾向を正確に把握

傾向分析前に数回GCを実施

増加傾向の高いオブジェクトに注目

増加傾向の高いオブジェクトの関連状況を追跡

Page 27: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.27

Javaアプリケーションの性能問題の分析Memory Leak Detectorによるメモリリーク検出

• 参照関係のあるオブジェクトを追跡

• 参照数の多いオブジェクトのタイプを追跡してリーク箇所を追跡

• 参照関係を順次追跡して根本原因となるオブジェクトのタイプを絞り込み

リーク傾向のあるオブジェクトタイプの参照関係を展開

参照数の多い参照オブジェクトのタイプを追跡

さらに参照関係を展開し根本原因を絞り込む

Page 28: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.28

Javaアプリケーションの性能問題の分析Memory Leak Detectorによるメモリリーク検出

• オブジェクトのタイプからリークしているインスタンスを追跡

• インスタンスの追跡により割り当て箇所の特定が可能

増加傾向のあるオブジェクトを格納するオブジェクト・タイプを特定

リークしているインスタンスを追跡して割り当て箇所を特定

Page 29: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.29

Javaアプリケーションの性能問題の分析Memory Leak Detectorによるメモリリーク検出

• 増加傾向のあるオブジェクトのインスタンスを順次追跡

• 最終的に該当オブジェクトを保持するスレッドを特定可能

インスタンスの保持関係を追跡

増加傾向のあるオブジェクトを保持するスレッドを特定

Page 30: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.30

Javaアプリケーションの性能問題の分析Memory Leak Detectorによるメモリリーク検出

• 増加傾向のあるオブジェクトの格納元からトレース

• 増加傾向のあるオブジェクトを格納している箇所を特定

• メモリリークを引き起こしている箇所を正確に突き止める

増加傾向のあるオブジェクトを格納するインスタンスの割り当てを確認する

スタックトレースから該当オブジェクトの割り当てを行っているアプリケーション位置を把握

増加傾向のあるインスタンスを割り当てているトレース情報を追跡

Page 31: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.31

JRockit Flight Recorder障害対応を強力に支援するOracle JRockitの新機能

Java EE/ISVアプリ

Oracle WebLogicServer

OracleJRockit

メモリ利用率の増加傾向 メモリ内データの内訳と増加率JRockit Flight Recorder

自動記録常時記録"録りっぱなし"

自動ファイル出力

DB関連処理内訳とSQL毎の負荷リスト

記録されるデータ(例)

Javaスレッドの処理状況GUIツール

特徴③アプリ修正不要

特徴②情報消失の防止

特徴①画期的な低負荷技術

その他多数…

[これまでの障害対応の課題]

•ログでは足りない情報不足

•ダウンや再起動による情報消失

[JRockit Flight Recorderによる解決]

•詳細情報を常時記録

•自動ファイル出力機能

Page 32: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.32

Page 33: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.33

Page 34: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.34

Page 35: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.35

是非JRockitを使ってみてください!!

• 評価版ダウンロード

• JRockit R28.0(Flight Recorderを搭載したJRockit)

• http://www.oracle.com/technology/global/jp/software/products/jrockit/index.ht

ml

• WebLogic Server 10.3.3(JRockit R28.0を同梱したWebLogic Server)

• http://www.oracle.com/technology/global/jp/software/products/ias/htdocs/wls_

main.html

• 関連マニュアル

• Oracle JRockit Flight Recorder Runtime Guide

• http://download.oracle.com/docs/cd/E15289_01/doc.40/e15070/toc.htm

• Using WLDF with Oracle JRockit Flight Recorder

• http://download.oracle.com/docs/cd/E14571_01/web.1111/e13714/using_flig

htrecorder.htm

• JRockit -XX Command-Line Option

• http://download.oracle.com/docs/cd/E15289_01/doc.40/e15062/optionxx.htm

• JRMC Eclipse Update Site

• http://www.oracle.com/technology/software/products/jrockit/missioncontrol/updat

es/base/4.0.1/eclipse/

Page 36: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.36

http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28

Oracle Direct 検索

あなたにいちばん近いオラクル

Oracle Directまずはお問合せください

Web問い合わせフォーム フリーダイヤル

専用お問い合わせフォームにてご相談内容を承ります。

※フォームの入力には、Oracle Direct Seminar申込時と同じログインが必要となります。

※こちらから詳細確認のお電話を差し上げる場合がありますので、ご登録されている連絡先が最新のものになっているか、ご確認下さい。

0120-155-096

※月曜~金曜 9:00~12:00、13:00~18:00

(祝日および年末年始除く)

システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。

システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

Page 37: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.37

Page 38: 高速JVM Oracle JRockitの全貌 入門編

Copyright© 2011, Oracle. All rights reserved.38

38