Java内存跟踪工具-NMT

概述

Java7U40之后JDK提供了Native Memory Tracking工具,跟踪JVM内部的内存使用,并可以通过jcmd命令来访问。不过要注意的是NMT是通过在JVM代码中添加跟踪点的方式实现内存跟踪的,因此NMT不能跟踪第三方Native库的内存使用。

如何开启NMT

NMT功能默认关闭,可以通过以下方式开启:

-XX:NativeMemoryTracking=[off | summary | detail]
配置项 说明
off 默认配置
summary 只收集汇总信息
detail 收集每次调用的信息

注意,根据Java官方文档,开启NMT会有5%-10%的性能损耗;

如果想JVM退出时打印退出时的内存使用情况,可以通过如下配置项:

-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics

访问NMT数据

JDK提供了jcmd命令来访问NMT数据:

jcmd  VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
配置项 说明
summary 只打印打印按分类汇总的内存用法
detail 打印按分类汇总的内存用法、virtual memory map和每次内存分配调用
baseline 创建内存快照,以比较不同时间的内存差异
summary.diff 打印自上次baseline到现在的内存差异,显示汇总信息
detail.diff 打印自上次baseline到现在的内存差异, 显示详细信息
shutdown 关闭NMT功能
scale 指定内存单位,默认为KB

你可能感兴趣的:(Java内存跟踪工具-NMT)