JVM參數之NativeMemoryTracking


Java8給HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用於追蹤JVM的內部內存使用,一般在壓測調參的時候使用,生產環境不要引入。

參考資料:
https://www.jianshu.com/p/1e65d4d973cd
https://www.cnblogs.com/liululee/p/11143623.html
https://my.oschina.net/foxty/blog/1934968

1、啟用:-XX:NativeMemoryTracking=detail:

       -XX:NativeMemoryTracking=[off | summary | detail] # off: 默認關閉 # summary: 只統計各個分類的內存使用情況. # detail: Collect memory usage by individual call sites.

       打開NMT會帶來5%-10%的性能損耗

 

2、查看:

       jcmd命令隨時獲取本機內存信息:
       2.1、 jcmd <pid> VM.native_memory
       2.2、jcmd <pid> VM.native_memory scale=MB
               其中scale參數可以指定展示的單位,可以為KB或者MB或者GB

                jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]

# summary: 分類內存使用情況.

# detail: 詳細內存使用情況,除了summary信息之外還包含了虛擬內存使用情況。

# baseline: 創建內存使用快照,方便和后面做對比

# summary.diff: 和上一次baseline的summary對比

# detail.diff: 和上一次baseline的detail對比

# shutdown: 關閉NMT

 

3、創建baseline:

      3.1、 NMT允許我們跟蹤內存分配如何隨時間變化。首先,我們應該將應用程序的當前狀態標記為基線:
               jcmd <pid> VM.native_memory baseline
               成功:Baseline succeeded

      3.2、NMT使用+和 - 符號將告訴我們在此期間內存使用情況如何變化:
               查看diff:然后,過了一會兒,我們可以將當前的內存使用情況與該基線(baseline)進行比較:
               jcmd <pid> VM.native_memory summary.diff

示例:
Total: reserved=1771487KB +3373KB, committed=491491KB +6873KB

-                        Java Heap (reserved=307200KB, committed=307200KB)

                         (mmap: reserved=307200KB, committed=307200KB)

-                        Class (reserved=1084300KB +2103KB, committed=39356KB +2871KB)

// Truncated
保留和提交的總內存分別增加了3 MB和6 MB。可以很容易地發現內存分配的其他波動。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM