概述
Java7U40之后JDK提供了Native Memory Tracking工具,跟蹤JVM內部的內存使用反璃,并可以通過jcmd命令來訪問荣月。不過要注意的是NMT是通過在JVM代碼中添加跟蹤點的方式實現(xiàn)內存跟蹤的笨奠,因此NMT不能跟蹤第三方Native庫的內存使用袭蝗。
如何開啟NMT
NMT功能默認關閉唤殴,可以通過以下方式開啟:
-XX:NativeMemoryTracking=[off | summary | detail]
配置項 | 說明 |
---|---|
off | 默認配置 |
summary | 只收集匯總信息 |
detail | 收集每次調用的信息 |
注意,根據(jù)Java官方文檔到腥,開啟NMT會有5%-10%的性能損耗眨八;
如果想JVM退出時打印退出時的內存使用情況,可以通過如下配置項:
-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
訪問NMT數(shù)據(jù)
JDK提供了jcmd命令來訪問NMT數(shù)據(jù):
jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
配置項 | 說明 |
---|---|
summary | 只打印打印按分類匯總的內存用法 |
detail | 打印按分類匯總的內存用法左电、virtual memory map和每次內存分配調用 |
baseline | 創(chuàng)建內存快照,以比較不同時間的內存差異 |
summary.diff | 打印自上次baseline到現(xiàn)在的內存差異页响,顯示匯總信息 |
detail.diff | 打印自上次baseline到現(xiàn)在的內存差異, 顯示詳細信息 |
shutdown | 關閉NMT功能 |
scale | 指定內存單位篓足,默認為KB |