[转帖]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
二、查看原生内存信息:jcmd process_id VM.native_memory summary
3.使用summary.diff来查看跟baseline对比的统计信息
一、Native Memory Tracking (NMT)
是Hotspot VM用来分析VM内部内存使用情况的一个功能。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据。
1.Native memory tracking is not enabled 打开NMT
NMT必须先通过VM启动参数中打开,不过要注意的是,打开NMT会带来5%-10%的性能损耗。
-
-XX:NativeMemoryTracking=[off | summary | detail]
-
# off: 默认关闭
-
# summary: 只统计各个分类的内存使用情况.
-
# detail: Collect memory usage by individual call sites.
-
例如:-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
-
jcmd <pid> VM.native_memory detail scale=MB
-
jcmd <pid> VM.native_memory detail


3.使用summary.diff来查看跟baseline对比的统计信息
jcmd <pid> VM.native_memory summary.diff

4.jcmd查看NMT报告
-
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
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)
总结:
-
java8给HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用
-
-
使用-XX:NativeMemoryTracking=summary可以用于开启NMT,其中该值默认为off,
-
可以设置summary、detail来开启;开启的话,大概会增加5%-10%的性能消耗;使用-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
-
可以在jvm shutdown的时候输出整体的native memory统计;
-
其他的可以使用jcmd pid VM.native_memory相关命令进行查看、diff、shutdown等
-
-
整个memory主要包含了Java Heap、Class、Thread、Code、GC、Compiler、Internal、Other、Symbol、Native Memory Tracking、Arena Chunk这几部分;其中reserved表示应用可用的内存大小,committed表示应用正在使用的内存大小
[转帖]JVM NativeMemoryTracking ;jcmd process_id VM.native_memory;Native memory tracking is not enabled的更多相关文章
- 全网最硬核 JVM 内存解析 - 1.从 Native Memory Tracking 说起
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- Java堆外内存之七:JVM NativeMemoryTracking 分析堆外内存泄露
Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能.我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据. NMT介绍 工欲 ...
- JVM Heap Memory和Native Memory
JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory.前者我们比较熟悉,是供Java应用程序使用的:后者也称为C-Heap,是供JVM自身进程使用的.Heap Me ...
- [转帖] JVM虚拟机的历史
Java虚拟机发展史 https://blog.csdn.net/tinyDolphin/article/details/72809018 如何查看自己的虚拟机版本?Sun Classic / Exa ...
- [转帖]JVM总结--JVM体系结构
JVM总结--JVM体系结构 https://blog.csdn.net/samjustin1/article/details/52215274 需要不断的学习才可以. 2016年08月15日 22: ...
- [转帖]JVM性能调优详解
JVM性能调优详解 https://www.cnblogs.com/secbro/p/11833651.html 应该是 jdk8 以前的方法 貌似permsize 已经放弃这一块了. 前面我们学习了 ...
- [转帖]JVM—深入理解内存模型与垃圾收集机制
JVM—深入理解内存模型与垃圾收集机制 https://juejin.im/post/5d68dc9ee51d4561ad6548f7 前言 Java是一种跨平台的语言,当初其设计初衷也是为了解决各个 ...
- [转帖]JVM内存结构 VS Java内存模型 VS Java对象模型
JVM内存结构 VS Java内存模型 VS Java对象模型 https://www.hollischuang.com/archives/2509 Java作为一种面向对象的,跨平台语言,其对象.内 ...
- JVM工具jcmd实践
暂时参考以下链接,后续补充自己的实践. https://www.jianshu.com/p/388e35d8a09b
- JVM性能调优(out of memory内存溢出/泄露出来)
JVM基础知识: JVM调优工具: 1.jmap jmap常用参数 命令:jmap -heap PID >> D:\heap.log 解释: using thread-local obje ...
随机推荐
- 理论+示例,详解GaussDB(DWS)资源管理
摘要:合理地管理和分配系统资源,是保证数据库系统稳定高效运行的关键. 本文分享自华为云社区<GaussDB(DWS)资源管理能力介绍与应用示例>,作者: 门前一棵葡萄树 . 一.资源管理能 ...
- 从架构设计理念到集群部署,全面认识KubeEdge
摘要:本篇文章将从KubeEdge架构设计理念.KubeEdge代码目录概览.KubeEdge集群部署三方面带大家认识KubeEdge. KubeEdge即Kube+Edge,顾名思义就是依托K8s的 ...
- 聊聊LiteOS中生成的Bin、HEX、ELF三种文件格式
摘要:我们在使用编译器在编译工程后会要求生成可执行文件,将这些文件烧录到MCU进行运行,达到我们测试和使用程序的目的,再使用工具链进行编译的时候往往生成.bin..hex ..elf ..alf等文件 ...
- GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
摘要:云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战.华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性 ...
- HanLP — HMM隐马尔可夫模型 -- 语料库
隐马尔可可夫模型(Hidden Markov Model,HMM)是统计模型,用于描述一个含有隐含未知参数的马尔可夫过程. HMM由初始概率分布.状态转移概率分布和观测概率分布确定. BMES =&g ...
- 断点续传(上传)Java版
PostMan 客户端调用部分见,断点续传(上传)C#版 1. 客户每次上传前先获取一下当前文件已经被服务器接受了多少 2. 上传时设定偏移量,跳过服务器已收到的长度 @SpringBootTest ...
- Hugging Face 音频 AI 派对直播回放(上)
直播回放视频地址:https://www.bilibili.com/video/BV1nh4y1X7zs/?vd_source=c5a5204620e35330e6145843f4df6ea4 为了庆 ...
- 震惊!二狗子的火锅店被隔壁老王 DDoS 攻击了
近两年,游戏出海已经成为了出海热潮中的一员.在"后宅经济时代"的影响下,也得益于海外市场的互联网人口,游戏出海涨势非常迅猛.部分游戏在短时间内走红后,就会遭到了一些"有心 ...
- JSP 学习笔记 | 二、JSP 脚本 & 案例实现 & 缺点分析
前文:JSP 学习笔记 | 一.JSP 原理理解 JSP脚本用于在 JSP页面内定义 Java代码.很多入门案例中我们就在 JSP 页面定义的 Java 代码就是 JSP 脚本. JSP 脚本分类 J ...
- SAE 联合乘云至达与谱尼测试携手共同抗疫
作者 | 营火.计缘.张祖旺 前言 当前疫情形势依然严峻,各行各业众志成城,携手抗疫.新冠病毒核酸检测筛查是疫情防控的重要一环,如何应对疫情的不断反复,以及每日数以万计的核酸检测结果成为每个检测公司的 ...
