[转帖]JVM NativeMemoryTracking ;jcmd process_id VM.native_memory;Native memory tracking is not enabled

jvm,nativememorytracking,jcmd,process,id,vm,native,memory,tracking,is,not,enabled · 浏览次数 : 0

小编点评

**java8给HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用 使用-XX:NativeMemoryTracking=summary可以用于开启NMT,其中该值默认为off,可以设置summary、detail来开启;开启的话,大概会增加5%-10%的性能消耗;** **NMT 特能:** * 通过 memory tracking 跟踪 JVM 内部的所有内存使用 * 可以通过 memory summary 和 memory detail 来查看内存使用情况 * 可以通过 memory statistics 来查看内存使用情况 * 可以开启 NMT 来提升性能 **开启 NMT:** * 使用 -XX:NativeMemoryTracking=summary 参数开启 NMT * 可以通过 jcmd pid VM.native_memory相关命令进行查看、diff、shutdown 等 **其他选项:** * -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics 可以开启 NMT 同时输出内存使用情况 * -XX:+PrintNMTStatistics 可以开启 NMT 同时输出内存使用情况 **总结:** * java8 给HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用 * NMT 允许开发者通过 memory summary 和 memory detail 来查看内存使用情况 * NMT 允许开发者通过 memory statistics 来查看内存使用情况 * NMT 允许开发者开启 NMT 来提升性能

正文

目录

 

一、Native Memory Tracking (NMT)

    是Hotspot VM用来分析VM内部内存使用情况的一个功能。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据。

1.Native memory tracking is not enabled 打开NMT

二、查看原生内存信息:jcmd process_id VM.native_memory summary

1.打基线

2.查看detail

3.使用summary.diff来查看跟baseline对比的统计信息

4.jcmd查看NMT报告

5.NMT报告分析

总结:


一、Native Memory Tracking (NMT)

    是Hotspot VM用来分析VM内部内存使用情况的一个功能。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据。

1.Native memory tracking is not enabled 打开NMT

NMT必须先通过VM启动参数中打开,不过要注意的是,打开NMT会带来5%-10%的性能损耗。

  1. -XX:NativeMemoryTracking=[off | summary | detail]
  2. # off: 默认关闭
  3. # summary: 只统计各个分类的内存使用情况.
  4. # detail: Collect memory usage by individual call sites.
  5. 例如:-XX:NativeMemoryTracking=detail

二、查看原生内存信息:jcmd process_id VM.native_memory summary

jcmd <pid> VM.native_memory  [summary | detail | baseline | summary.diff | detail.diff | shutdown] 

1.打基线

jcmd 1 VM.native_memory baseline

2.查看detail

  1. jcmd <pid>  VM.native_memory detail  scale=MB
  2. jcmd <pid>  VM.native_memory detail 

 

3.使用summary.diff来查看跟baseline对比的统计信息

 

jcmd <pid> VM.native_memory summary.diff

 

4.jcmd查看NMT报告

  1. jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
  2. # summary: 分类内存使用情况.
  3. # detail: 详细内存使用情况,除了summary信息之外还包含了虚拟内存使用情况。
  4. # baseline: 创建内存使用快照,方便和后面做对比
  5. # summary.diff: 和上一次baseline的summary对比
  6. # detail.diff: 和上一次baseline的detail对比
  7. # shutdown: 关闭NMT
  •  

5.NMT报告分析

reserved表示应用可用的内存大小
committed表示应用正在使用的内存大小

Total: reserved=1927465KB +66KB, committed=887589KB +66KB

-                 Java Heap (reserved=1048576KB, committed=524288KB)
                            (mmap: reserved=1048576KB, committed=524288KB)
 
-                     Class (reserved=387186KB, committed=89842KB)
                            (classes #15588) 已经加载的classes个数
                            (malloc=2162KB #23499)
                            (mmap: reserved=385024KB, committed=87680KB)
               
-                    Thread (reserved=46014KB, committed=46014KB)   
                            (thread #85)   Thread部分表示线程个数
                            (stack: reserved=45648KB, committed=45648KB)
                            (malloc=267KB #448)
                            (arena=98KB #165)
 
-                      Code (reserved=256433KB, committed=39725KB)  表示JIT生成的或者缓存的instructions占用
                            (malloc=6833KB #9122)
                            (mmap: reserved=249600KB, committed=32892KB)
 
-                        GC (reserved=49673KB, committed=48137KB)  目前已经占用的内存空间用于帮助GC
                            (malloc=46593KB #362)
                            (mmap: reserved=3080KB, committed=1544KB)
 
-                  Compiler (reserved=309KB, committed=309KB)
                            (malloc=178KB #1157)
                            (arena=131KB #6)
 
-                  Internal (reserved=71623KB +1KB, committed=71623KB +1KB) 表示命令行解析、JVMTI等占用
                            (malloc=71591KB +1KB #19791 +4)
                            (mmap: reserved=32KB, committed=32KB)
 
-                    Symbol (reserved=22144KB, committed=22144KB)  表示诸如string table及constant pool等symbol占用
                            (malloc=18492KB #182273)
                            (arena=3652KB #1)
 
-    Native Memory Tracking (reserved=4222KB +66KB, committed=4222KB +66KB)  表示该功能自身占用
                            (malloc=425KB +54KB #6037 +760)
                            (tracking overhead=3797KB +12KB)
 
-               Arena Chunk (reserved=189KB, committed=189KB) 表示arena chunk占用
                            (malloc=189KB)
 
-                   Unknown (reserved=41096KB, committed=41096KB)
                            (mmap: reserved=41096KB, committed=41096KB)

 

总结:

 

  1. java8给HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用
  2. 使用-XX:NativeMemoryTracking=summary可以用于开启NMT,其中该值默认为off
  3. 可以设置summary、detail来开启;开启的话,大概会增加5%-10%的性能消耗;使用-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
  4. 可以在jvm shutdown的时候输出整体的native memory统计;
  5. 其他的可以使用jcmd pid VM.native_memory相关命令进行查看、diff、shutdown等
  6. 整个memory主要包含了Java Heap、Class、Thread、Code、GC、Compiler、Internal、Other、Symbol、Native Memory Tracking、Arena Chunk这几部分;其中reserved表示应用可用的内存大小,committed表示应用正在使用的内存大小

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览103413 人正在系统学习中

与[转帖]JVM NativeMemoryTracking ;jcmd process_id VM.native_memory;Native memory tracking is not enabled相似的内容:

[转帖]JVM NativeMemoryTracking ;jcmd process_id VM.native_memory;Native memory tracking is not enabled

目录 一、Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据。 1.Native memory tracking is not enabled 打开NMT 二、查看原生内

[转帖]【JVM】关于 JVM,你需要掌握这些 | 一文彻底吃透 JVM 系列

【JVM】关于 JVM,你需要掌握这些 | 一文彻底吃透 JVM 系列 作者:冰河 2022-11-04 四川 本文字数:13519 字 阅读完需:约 44 分钟 写在前面 最近,一直有小伙伴让我整理下关于 JVM 的知识,经过十几天的收集与整理,初版算是整理出来了。希望对大家有所帮助。 JDK 是

[转帖]JVM metaspace outofmemory

https://www.jianshu.com/p/1ca44f94e42f 解决服务器进程退出问题(metaspace溢出) 现象 策划反应服务器进不去,远程看了一下进程消失了(crash) 有时候也会出现能登录,但是无法执行操作(进程还在),无法被正常shutdown 进程根目录下出现了java

[转帖]JVM内存非典型术语介绍(shallow/retained/rss/reserved/committed)

https://www.jianshu.com/p/871d6bb3a32d JVM内存非典型术语介绍(shallow/retained/rss/reserved/committed) 背景 ​ 在服务器性能优化内存这一项时,有一些现象很诡异。如top显示的RES很大,但是实际jvm堆内存占用很小,

[转帖]jvm crash when overwritten running jar

https://www.jianshu.com/p/bf0a051e4c63 现象 策划热更完配置表后 jvm直接就crash了(开发机linux) crash日志 日志分析 从crash日志看是reload配置表 使用Reflections扫描配置类 最终读取jar包 java.util.zip.

[转帖]jvm一般相关配置OutOfMemoryError关参数配置解释

一般运行java应用都会根据实际情况设置一些jvm相关运行参数 特别是有关内存和oom溢出等参数,方便后续问题定位和解决 如常用的以下配置 nohup java -Xms256m -Xmx24g -Xmn8g -verbose:gc -XX:+PrintGCDateStamps -XX:+Print

[转帖]JVM 中你不可不知的参数

https://zhuanlan.zhihu.com/p/91757020?utm_id=0 有的同学虽然写了一段时间 Java 了,但是对于 JVM 却不太关注。有的同学说,参数都是团队规定好的,部署的时候也不用我动手,关注它有什么用,而且,JVM 这东西,听上去就感觉很神秘很高深的样子,还是算了

[转帖]JVM参数之-XX:SurvivorRatio

https://www.cnblogs.com/hellxz/p/10841550.html 最近面试过程中遇到一些问JVM参数的,本着没用过去学习的办法看了些博客写得不准确,参考oracle的文档记录一下,争取每天记录一点知识点 -XX:SurvivorRatio=6 ,设置的是Eden区与每一个

[转帖]JVM 虚拟机(整体架构、类文件结构)我来了~~~

JVM 虚拟机(整体架构、类文件结构)我来了~~~ 虚拟机 1.1 发展历程 1.1.1 java 往事 ​ Java 诞生在一群懒惰、急躁而傲慢的程序天才之中。 ​ 1990 年 12 月,Sun 的工程师 Patrick Naughton 被当时糟糕的 Sun C++ 工具折磨的快疯了。他大声抱

[转帖]JVM 运行数据区深度解析

https://my.oschina.net/jiagoushi/blog/5597878 运行数据区 字节码只是一个二进制文件存放在那里。要想在 jvm 里跑起来,先得有个运行的内存环境。 也就是我们所说的 jvm 运行时数据区。 1)运行时数据区的位置 运行时数据区是 jvm 中最为重要的部分,