目录

一、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的更多相关文章

  1. 全网最硬核 JVM 内存解析 - 1.从 Native Memory Tracking 说起

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  2. Java堆外内存之七:JVM NativeMemoryTracking 分析堆外内存泄露

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

  3. JVM Heap Memory和Native Memory

    JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory.前者我们比较熟悉,是供Java应用程序使用的:后者也称为C-Heap,是供JVM自身进程使用的.Heap Me ...

  4. [转帖] JVM虚拟机的历史

    Java虚拟机发展史 https://blog.csdn.net/tinyDolphin/article/details/72809018 如何查看自己的虚拟机版本?Sun Classic / Exa ...

  5. [转帖]JVM总结--JVM体系结构

    JVM总结--JVM体系结构 https://blog.csdn.net/samjustin1/article/details/52215274 需要不断的学习才可以. 2016年08月15日 22: ...

  6. [转帖]JVM性能调优详解

    JVM性能调优详解 https://www.cnblogs.com/secbro/p/11833651.html 应该是 jdk8 以前的方法 貌似permsize 已经放弃这一块了. 前面我们学习了 ...

  7. [转帖]JVM—深入理解内存模型与垃圾收集机制

    JVM—深入理解内存模型与垃圾收集机制 https://juejin.im/post/5d68dc9ee51d4561ad6548f7 前言 Java是一种跨平台的语言,当初其设计初衷也是为了解决各个 ...

  8. [转帖]JVM内存结构 VS Java内存模型 VS Java对象模型

    JVM内存结构 VS Java内存模型 VS Java对象模型 https://www.hollischuang.com/archives/2509 Java作为一种面向对象的,跨平台语言,其对象.内 ...

  9. JVM工具jcmd实践

    暂时参考以下链接,后续补充自己的实践. https://www.jianshu.com/p/388e35d8a09b

  10. JVM性能调优(out of memory内存溢出/泄露出来)

    JVM基础知识: JVM调优工具: 1.jmap jmap常用参数 命令:jmap -heap PID >> D:\heap.log 解释: using thread-local obje ...

随机推荐

  1. GaussDB技术解读系列丨运维自动驾驶探索

    本文分享自华为云社区<DTCC 2023专家解读 | GaussDB技术解读系列之运维自动驾驶探索>,作者:GaussDB 数据库 . 近日,在第14届中国数据库技术大会(DTCC2023 ...

  2. ​HTML代码混淆技术:原理、应用和实现方法详解

    ​ HTML代码混淆是一种常用的反爬虫技术,它可以有效地防止爬虫对网站数据的抓取.本文将详细介绍HTML代码混淆技术的原理.应用以及实现方法,帮助大家更好地了解和运用这一技术. 一.HTML代码混淆的 ...

  3. 一文读懂火山引擎数智平台 VeDI 新品——管理驾驶舱 Plus

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 4 月 18 日,2023 春季火山引擎 FORCE 原动力大会在上海举行,火山引擎发布数智平台(VeDI)新品- ...

  4. Hugging Face CEO: 2024 将是AI丰收年

    来自CEO的新年祝福 ️附加了他对于2024年人工智能界的四大预测你觉得2024年人工智能和机器学习界会是什么样的呢?欢迎留言

  5. 【Git】git多分支开发 git远程仓库 ssh链接远程仓库 协同开发 冲突解决 线上分支合并 pycharm操作git 远程仓库回滚

    目录 昨日回顾 1 git多分支开发 分支操作 合并分支 2 git远程仓库 2.1 把路飞项目传到远程仓库(非空的) 3 ssh链接远程仓库,协同开发 4 协同开发 5 冲突解决 5.1 多人同一分 ...

  6. C++ Idioms Pimpl

    References C++ Coding Standard 這本書的中文版不知道是不是翻譯問題,還是原作就有這種傾向,有些咬文嚼字的很不好懂. Exceptional C++ 這本比上面那本容易理解 ...

  7. 负载均衡--rpc服务端

    1. dubbo负载均衡的作用? 其出发点,自然也就是普通的负载均衡器的出发点了. 将负载均衡功能实现在rpc客户端侧,以便能够随时适应外部的环境变化,更好地发挥硬件作用. 而且客户端的负载均衡天然地 ...

  8. OpenSCA用开源的方式做开源风险治理:Why? What? How?

    随着容器.微服务等新技术的快速迭代,开源软件已成为业界主流形态,开源和云原生时代的到来导致软件供应链越来越趋于复杂化和多样化,网络攻击者开始采用软件供应链攻击作为击破关键基础设施的的重要突破口,从而导 ...

  9. 五、java操作swift对象存储(官网样例)

    系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...

  10. java基础-反射-day15

    目录 1. 案例引入 2. Class 的理解 3. 反射的详细使用 4. Class 类都有哪些实例 5. 详细使用 6. 获取属性 7. 获取方法 8 获取类的 接口 注解 所在的包 9. 思考 ...