• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Native Memory Tracking
 

Native Memory Tracking

on

  • 1,923 views

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

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

Statistics

Views

Total Views
1,923
Views on SlideShare
1,223
Embed Views
700

Actions

Likes
11
Downloads
10
Comments
1

4 Embeds 700

http://d.hatena.ne.jp 653
https://twitter.com 45
http://cloud.feedly.com 1
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • タイトルに合うように表紙写真を差し替えました。
    JJUG CCC当日にあまり時間がなく、別スライドの使い回しにしていたので、少し気になっていたのです。
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Native Memory Tracking Native Memory Tracking Presentation Transcript

    • Native Memory Tracking Takahiro YAMADA @yamadamn 2013/11/9
    • アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
    • アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
    • Native Memory Tracking (NMT) の概要 • Javaヒープ以外のネイティブ領域の使われ方をトラッキング • 例えば、従来では難しかったネイティブ領域のリークを確認 • デフォルトでは無効 • 有効化すると、5∼10%のオーバーヘッドがあるとされている • Oracle (HotSpot) JDK 7 Update 40 (7u40) 以降で利用可能 • JRockitの診断コマンドprint_memusage相当をHotSpotに移植 ©Oracle
    • 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
    • アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
    • 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)
    • 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)
    • 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)
    • アジェンダ • Native Memory Tracking (NMT) とは • NMTを使ってみる • 補足・参考情報
    • 追加JVMオプション • NMT関連の追加のオプション -XX:+UnlockDiagnosticVMOptions によって追加オプションを有効化 • NMT以外にも様々な診断用の追加オプションを有効化できる模様 -XX:+PrintNMTStatistics • VM終了時に、NMTの統計情報を出力 • オプション-XX:NativeMemoryTracking=[summary|detail]の指定に準じる • -XX:-AutoShutdownNMT • NMTの自動シャットダウンを無効化 • リソースが少ない状態(例: ネイティブ領域が枯渇)だと、NMTが自動停止さ れるが、それを無効化しておく
    • 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)を確認
    • [参考] 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)
    • 参考資料 • 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
    • まとめ • 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
    • ご清聴いただき、ありがとうございました Takahiro YAMADA @yamadamn 2013/11/9