Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Native Memory Tracking

6,422 views

Published on

HotSpot 7u40 で導入されたNative Memory Tracking機能についてです。

Published in: Technology, Education
  • タイトルに合うように表紙写真を差し替えました。
    JJUG CCC当日にあまり時間がなく、別スライドの使い回しにしていたので、少し気になっていたのです。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Native Memory Tracking

  1. 1. Native Memory Tracking Takahiro YAMADA @yamadamn 2013/11/9
  2. 2. アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
  3. 3. アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
  4. 4. Native Memory Tracking (NMT) の概要 • Javaヒープ以外のネイティブ領域の使われ方をトラッキング • 例えば、従来では難しかったネイティブ領域のリークを確認 • デフォルトでは無効 • 有効化すると、5∼10%のオーバーヘッドがあるとされている • Oracle (HotSpot) JDK 7 Update 40 (7u40) 以降で利用可能 • JRockitの診断コマンドprint_memusage相当をHotSpotに移植 ©Oracle
  5. 5. NMTの利用方法 • 起動オプションを指定して有効化 • -XX:NativeMemoryTracking=[off|summary|detail] オプション off summary detail 説明 NMTをオフ (デフォルト) サブシステムごとのメモリ使用量のみ集計 summaryに加え、コールサイトごとのメモリ使用量も収集 • 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. 6. アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
  7. 7. NMTを使ってみる (1) $ jcmd 24000 com.sun.enterprise.glassfish.bootstrap.ASMain --domain domain1 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)
  8. 8. NMTを使ってみる (2) $ 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)
  9. 9. NMTを使ってみる (3) $ 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)
  10. 10. アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
  11. 11. 追加JVMオプション • NMT関連の追加のオプション -XX:+UnlockDiagnosticVMOptions によって追加オプションを有効化 • NMT以外にも様々な診断用の追加オプションを有効化できる模様 -XX:+PrintNMTStatistics • VM終了時に、NMTの統計情報を出力 • オプション-XX:NativeMemoryTracking=[summary|detail]の指定に準じる • -XX:-AutoShutdownNMT • NMTの自動シャットダウンを無効化 • リソースが少ない状態(例: ネイティブ領域が枯渇)だと、NMTが自動停止さ れるが、それを無効化しておく
  12. 12. jcmdのTips • jcmd 0 <コマンド> • PIDに「0」を指定すると、認識したすべてのJVMプロセスに対し実行 • VM.native_memory以外も利用可能 $ 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) (途中省略) 23974: Native memory tracking is not enabled ←このプロセスはNMTが無効 • 他の使い方は、ヘルプ(jcmd -h)を確認
  13. 13. [参考] JRockitのprint_memusage • jrcmd <PID> print_memusage $ jrcmd 23227 weblogic.Server 23402 jrockit.tools.jrcmd.JrCmd $ jrcmd 23227 print_memusage 23227: Total mapped Java heap GC tables Thread stacks Compiled code Internal OS Other Classblocks Java class data in 18395 classes) - Native memory tracking 2098408KB 524288KB 17548KB 33572KB 1048576KB 1352KB 222184KB 129800KB 6656KB 113408KB 1024KB (reserved=1143216KB) (reserved=0KB) (#threads=37) (used=12253KB) (malloced=6615KB #18395) (malloced=113207KB #83208 (malloced=88KB #10)
  14. 14. 参考資料 • 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. 15. まとめ • JDK7u40以降では、Native Memory Tracking (NMT) を利用可能 • まずは触ってみましょう • JDK6以前をご利用の方はバージョンアップを メジャー リリース日 公式アップデート終了 1.4 2002/2 2006/12 5.0 2004/5 2009/10 6 7 2006/12 2011/7 2013/2 2015/3 (*) バージョン * もしくはそれ以降。事情により変更になる場合があります。 http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html
  16. 16. ご清聴いただき、ありがとうございました Takahiro YAMADA @yamadamn 2013/11/9

×