17
Copyright (c)2013 ITOCHU Techno-Solutions Corporation WebLogic Server勉強会@東京 LT Native Memory Tracking ソフトウェアサービス本部 ミドルウェアサポート部 山田 貴裕 2013/12/19

Native Memory Tracking機能

Embed Size (px)

Citation preview

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

WebLogic Server勉強会@東京 LT

Native Memory Tracking

ソフトウェアサービス本部 ミドルウェアサポート部

山田 貴裕

2013/12/19

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

はじめに

• 発表する内容は個人の見解であり、所属する組織の公式な見解ではありません。

• 資料の内容は正確を期するよう注意しておりますが、妥当性や

正確性について保証するものではありません。

• 環境

– WebLogic Server(WLS) 10.3.6, 12.1.1~

– Oracle JDK 7 Update 40以降

– 実行例はLinux x64上だが、その他の環境もほぼ同様に利用可能

2

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

アジェンダ

• Native Memory Tracking (NMT) とは

• NMTを使ってみる

• 補足・参考情報

3

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

アジェンダ

• Native Memory Tracking (NMT) とは

• NMTを使ってみる

• 補足・参考情報

4

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

Native Memory Tracking (NMT) の概要

• Javaヒープ以外のネイティブ領域の使われ方をトラッキング

– 例えば、従来では難しかったネイティブ領域のリークを確認

– デフォルトでは無効

• 有効化すると、5~10%のオーバーヘッドがあるとされている

• Oracle (HotSpot) JDK 7 Update 40 (7u40) 以降で利用可能

– JRockitの診断コマンドprint_memusage相当をHotSpotに移植

5

©Oracle

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

NMTの利用方法

1. 起動オプションを指定して有効化

-XX:NativeMemoryTracking=[off|summary|detail]

2. jcmdでNMTの使用状況を確認

– jcmd <PID> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown | autoShutdown]

[scale= KB | MB | GB]

– 利用方法はヘルプで確認可能

• jcmd <PID> help VM.native_memory

6

オプション 説明

off NMTをオフ (デフォルト)

summary サブシステムごとのメモリ使用量のみ集計

detail summaryに加え、コールサイトごとのメモリ使用量も収集

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

アジェンダ

• Native Memory Tracking (NMT) とは

• NMTを使ってみる

• 補足・参考情報

7

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

NMTを使ってみる (1)

• jcmd <PID> VM.native_memory summary

8

$ jcmd 24000 weblogic.Server 23974 org.apache.derby.drda.NetworkServerControl start 24112 sun.tools.jcmd.JCmd $ jcmd 24000 VM.native_memory summary 24000: Native Memory Tracking: Total: reserved=946746KB, committed=695670KB - Java Heap (reserved=786432KB, committed=583168KB) (mmap: reserved=786432KB, committed=583168KB) - Class (reserved=4196KB, committed=4196KB) (classes #14259) (malloc=4196KB, #5743) (途中省略) - Pooled Free Chunks (reserved=187KB, committed=187KB) (malloc=187KB)

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

NMTを使ってみる (2)

• jcmd <PID> VM.native_memory detail

9

$ jcmd 24000 VM.native_memory detail (最初の方はsummaryと同じ内容) Virtual memory map: [0x000000004018a000 - 0x000000004028b000] reserved 1028KB for Thread Stack from [JavaThread::run()+0x24] [0x000000004018a000 - 0x000000004028b000] committed 1028KB from [JavaThread::run()+0x24] [0x0000000040540000 - 0x0000000040641000] reserved 1028KB for Thread Stack from [GCTaskThread::run()+0x1c] [0x0000000040540000 - 0x0000000040641000] committed 1028KB from [GCTaskThread::run()+0x1c] (途中省略) [0x00002aea3c810889] WatcherThread::run()+0x19 (mmap: reserved=1028KB, committed=1028KB) [0x00002aea3c815ce6] Threads::create_vm(JavaVMInitArgs*, bool*)+0x1b6 (mmap: reserved=1028KB, committed=1028KB) [0x00002aea3c86152d] VMThread::run()+0x1d (mmap: reserved=1028KB, committed=1028KB) [0x00002aea3c71b7fc] perfMemory_init()+0x4c (mmap: reserved=32KB, committed=0KB)

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

NMTを使ってみる (3)

• jcmd <PID> VM.native_memory baseline / summary.diff

10

$ jcmd 24000 VM.native_memory baseline 24000: Successfully baselined. (しばらくしてから以下実行) $ jcmd 24000 VM.native_memory summary.diff 24000: Native Memory Tracking: Total: reserved=979593KB +30511KB, committed=728741KB +30735KB - Java Heap (reserved=786432KB, committed=582144KB -1023KB) (mmap: reserved=786432KB, committed=582144KB -1023KB) - Class (reserved=4370KB +174KB, committed=4370KB +174KB) (classes #15772 +1513) (malloc=4370KB +174KB, #6890 +1133) (途中省略) - Pooled Free Chunks (reserved=17651KB +17464KB, committed=17651KB +17464KB) (malloc=17651KB +17464KB)

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

アジェンダ

• Native Memory Tracking (NMT) とは

• NMTを使ってみる

• 補足・参考情報

11

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

追加JVMオプション

• NMT関連の追加のオプション

-XX:+UnlockDiagnosticVMOptions によって追加オプションを有効化

• NMT以外にも様々な診断用の追加オプションを有効化できる模様

-XX:+PrintNMTStatistics – VM終了時に、NMTの統計情報を出力

– オプション-XX:NativeMemoryTracking=[summary|detail]の指定に準じる

-XX:-AutoShutdownNMT – NMTの自動シャットダウンを無効化

– リソースが少ない状態(例: ネイティブ領域が枯渇)だと、NMTが自動停止されるが、

それを無効化しておく

– WLSの場合の実行例

12

$ JAVA_OPTIONS="-XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions"

$ JAVA_OPTIONS="${JAVA_OPTIONS} -XX:+PrintNMTStatistics -XX:-AutoShutdownNMT"

$ export JAVA_OPTIONS

$ ./startWebLogic.sh

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

jcmdのTips

• jcmd 0 <コマンド>

– PIDに「0」を指定すると、認識したすべてのJVMプロセスに対し実行

• VM.native_memory以外も利用可能

• 他の使い方は、ヘルプ(jcmd -h)を確認 13

$ jcmd 0 VM.native_memory 24000: Native Memory Tracking: Total: reserved=954125KB, committed=714821KB - Java Heap (reserved=786432KB, committed=593408KB) (mmap: reserved=786432KB, committed=593408KB) - Class (reserved=4456KB, committed=4456KB) (classes #16117) (malloc=4456KB, #7317) (途中省略) 23974: Native memory tracking is not enabled ← このプロセスはNMTが無効

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

[参考] JRockitのprint_memusage

• jrcmd <PID> print_memusage

14

$ jrcmd 23227 weblogic.Server 23402 jrockit.tools.jrcmd.JrCmd $ jrcmd 23227 print_memusage 23227: Total mapped 2098408KB (reserved=1143216KB) - Java heap 524288KB (reserved=0KB) - GC tables 17548KB - Thread stacks 33572KB (#threads=37) - Compiled code 1048576KB (used=12253KB) - Internal 1352KB - OS 222184KB - Other 129800KB - Classblocks 6656KB (malloced=6615KB #18395) - Java class data 113408KB (malloced=113207KB #83208 in 18395 classes) - Native memory tracking 1024KB (malloced=88KB #10)

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

参考資料

• NMT

– Native Memory Tracking in 7u40 | Marcus Hirt

• http://hirt.se/blog/?p=401

– 診断コマンド - print_memusage (JRockit)

• http://docs.oracle.com/cd/E22646_01/doc.40/b61441/diagnostic.htm#BABJHFHC

• jcmd

– jcmd をさわってみよう

• http://www.slideshare.net/TsunenagaHanyuda/jcmd-16803399

– JDK7u4の新機能について - Programming Studio

• http://www.coppermine.jp/docs/programming/2012/08/jdk7u4.html

• Java Roadmap

– JavaOne 2013 Report - Java Roadmap

• http://www.slideshare.net/OracleMiddleJP/javaone-2013-report/21

15

Copyright (c)2013 ITOCHU Techno-Solutions Corporation

まとめ

• JDK7u40以降では、Native Memory Tracking (NMT) を利用可能

– まずは触ってみましょう

• WLS10.3.6, 12.1.1~ではJDK7に対応

– JDK6以前をご利用の方はバージョンアップを

16

メジャーバージョン

リリース日 公式アップデート終了

1.4 2002/2 2006/12

5.0 2004/5 2009/10

6 2006/12 2013/2

7 2011/7 2015/3 (*)

* もしくはそれ以降。事情により変更になる場合があります。

http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html

WLS サポートに加入している場合は、公式アップデート終了後も、新しいモジュールが提供されるケースもあります。

Copyright (c)2013 ITOCHU Techno-Solutions Corporation