Upload
oracle-fusion-middleware
View
1.170
Download
1
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 サポートに加入している場合は、公式アップデート終了後も、新しいモジュールが提供されるケースもあります。