[转帖]聊聊HotSpot VM的Native Memory Tracking

聊聊,hotspot,vm,native,memory,tracking · 浏览次数 : 0

小编点评

**HotSpot VM的Native Memory Tracking** **简介** HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用。使用-XX:NativeMemoryTracking=summary可以开启NMT,详细展示内存占用情况。 **关键功能** * **Native Memory Tracking (NMT):**允许追踪JVM内部内存使用。 * **Summary 模式:**提供内存占用情况的概要信息,例如应用可用的内存大小、已使用的内存大小等。 * **Detail 模式:**提供内存占用情况的详细信息,例如内存类型、对象数量等。 **开启 NMT** 使用`-XX:NativeMemoryTracking=summary`参数开启NMT。默认情况下,NMT设置为`off`。 **查看内存占用情况** 可以使用以下命令查看内存占用情况: ``` jcmd 1 VM.native_memory ``` **不同模式的比较** | 模式 | 信息 | |---|---| | Summary | 概述内存占用情况 | | Detail | 详细内存占用情况 | **示例** 以下命令将使用`summary`模式开启NMT,并显示内存占用情况: ``` jcmd 1 VM.native_memory summary ``` **其他选项** * `-XX:+UnlockDiagnosticVMOptions`选项可用于打开诊断VM选项,包括堆栈分析。 * `-XX:+PrintNMTStatistics`选项可用于在jvm shutdown时输出整体的native memory统计。 **结论** NMT是HotSpot VM中非常重要的功能,可以用于深入了解JVM内存使用情况。使用NMT可以优化应用程序性能,并改善系统性能。

正文

https://cloud.tencent.com/developer/article/1406522

 

本文主要研究一下HotSpot VM的Native Memory Tracking

 

Native Memory Tracking

java8给HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用

使用

开启

-XX:NativeMemoryTracking=summary

使用-XX:NativeMemoryTracking=summary可以用于开启NMT,其中该值默认为off,可以设置为summary或者detail来开启;开启的话,大概会增加5%-10%的性能消耗

查看

/ # jcmd 1 VM.native_memory summary
/ # jcmd 1 VM.native_memory summary scale=MB

使用jcmd pid VM.native_memory可以查看,后面可以加summary或者detail,如果是开启summary的,就只能使用summary;其中scale参数可以指定展示的单位,可以为KB或者MB或者GB

创建baseline

/ # jcmd 1 VM.native_memory baseline
1:
Baseline succeeded

创建baseline之后可以用summary.diff来对比

查看diff

/ # jcmd 1 VM.native_memory summary.diff

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

shutdown时输出

-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics

使用上述命令可以在jvm shutdown的时候输出整体的native memory统计

关闭

/ # jcmd 1 VM.native_memory shutdown
1:
Native memory tracking has been turned off

使用jcmd pid VM.native_memory shutdown可以用于关闭NMT;注意使用jcmd关闭之后貌似没有对应jcmd命令来开启

实例

/ # jcmd 1 VM.native_memory summary scale=MB
1:
​
Native Memory Tracking:
​
Total: reserved=2175MB, committed=682MB
-                 Java Heap (reserved=501MB, committed=463MB)
                            (mmap: reserved=501MB, committed=463MB)
​
-                     Class (reserved=1070MB, committed=50MB)
                            (classes #8801)
                            (  instance classes #8204, array classes #597)
                            (malloc=2MB #24660)
                            (mmap: reserved=1068MB, committed=49MB)
                            (  Metadata:   )
                            (    reserved=44MB, committed=43MB)
                            (    used=42MB)
                            (    free=1MB)
                            (    waste=0MB =0.00%)
                            (  Class space:)
                            (    reserved=1024MB, committed=6MB)
                            (    used=5MB)
                            (    free=0MB)
                            (    waste=0MB =0.00%)
​
-                    Thread (reserved=228MB, committed=27MB)
                            (thread #226)
                            (stack: reserved=227MB, committed=26MB)
                            (malloc=1MB #1139)
​
-                      Code (reserved=243MB, committed=17MB)
                            (malloc=1MB #5509)
                            (mmap: reserved=242MB, committed=16MB)
​
-                        GC (reserved=23MB, committed=15MB)
                            (malloc=8MB #11446)
                            (mmap: reserved=16MB, committed=7MB)
​
-                  Compiler (reserved=26MB, committed=26MB)
                            (malloc=2MB #1951)
                            (arena=24MB #13)
​
-                  Internal (reserved=5MB, committed=5MB)
                            (malloc=3MB #9745)
                            (mmap: reserved=2MB, committed=2MB)
​
-                     Other (reserved=2MB, committed=2MB)
                            (malloc=2MB #202)
​
-                    Symbol (reserved=10MB, committed=10MB)
                            (malloc=8MB #233939)
                            (arena=3MB #1)
​
-    Native Memory Tracking (reserved=5MB, committed=5MB)
                            (tracking overhead=5MB)
​
-               Arena Chunk (reserved=63MB, committed=63MB)
                            (malloc=63MB)
  • 可以看到整个memory主要包含了Java Heap、Class、Thread、Code、GC、Compiler、Internal、Other、Symbol、Native Memory Tracking、Arena Chunk这几部分;其中reserved表示应用可用的内存大小,committed表示应用正在使用的内存大小
  • Java Heap部分表示heap内存目前占用了463MB;Class部分表示已经加载的classes个数为8801,其metadata占用了50MB;Thread部分表示目前有225个线程,占用了27MB;Code部分表示JIT生成的或者缓存的instructions占用了17MB;GC部分表示目前已经占用了15MB的内存空间用于帮助GC;Code部分表示compiler生成code的时候占用了26MB;Internal部分表示命令行解析、JVMTI等占用了5MB;Other部分表示尚未归类的占用了2MB;Symbol部分表示诸如string table及constant pool等symbol占用了10MB;Native Memory Tracking部分表示该功能自身占用了5MB;Arena Chunk部分表示arena chunk占用了63MB
  • 一个arena表示使用malloc分配的一个memory chunk,这些chunks可以被其他subsystems做为临时内存使用,比如pre-thread的内存分配,它的内存释放是成bulk的

小结

  • 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表示应用正在使用的内存大小

doc

与[转帖]聊聊HotSpot VM的Native Memory Tracking相似的内容:

[转帖]聊聊HotSpot VM的Native Memory Tracking

https://cloud.tencent.com/developer/article/1406522 序 本文主要研究一下HotSpot VM的Native Memory Tracking Native Memory Tracking java8给HotSpot VM引入了Native Memor

[转帖]聊聊jvm的Code Cache

https://www.jianshu.com/p/b064274536ed 本文主要研究一下jvm的Code Cache Code Cache JVM生成的native code存放的内存空间称之为Code Cache;JIT编译、JNI等都会编译代码到native code,其中JIT生成的na

[转帖]聊聊软件开发的REP、CCP、CRP原则

https://www.jianshu.com/p/5346f031904c 序 本文主要研究一下软件开发的REP、CCP、CRP原则 4187683058-8a26ecd11fb02b85_fix732.png The Reuse/Release Equivalence Principle (RE

[转帖]聊聊 ARM 与 RISC-V(转自邵巍的专栏《说透芯片》)

https://aijishu.com/a/1060000000218521 编者按:2个月前,我在《【揭秘半导体产业,助力中国芯】Winnie shao博士开课了!》中推荐过邵巍博士的这个专栏课程。今天再次推荐是因为全部内容已经连载完成。 可以看到,已经有1700多位读者朋友付费学习。由于时间等原

[转帖]聊聊jvm的Code Cache

https://juejin.cn/post/6844903809932591112 序 本文主要研究一下jvm的Code Cache Code Cache JVM生成的native code存放的内存空间称之为Code Cache;JIT编译、JNI等都会编译代码到native code,其中JI

[转帖]聊聊Chat GPT-1到GPT-4的发展历程

http://blog.itpub.net/69925873/viewspace-2935360/ OpenAI的Generative Pre-trained Transformer(GPT)模型通过引入非常强大的语言模型,在自然语言处理(NLP)领域引起了巨大震动。这些模型可以执行各种NLP任务,

[转帖]聊聊我对 GraphQL 的一些认知

https://www.modb.pro/db/139451 作者简介:haohongfan 是 Apache Dubbogo Committer,目前就职于京东,擅长高并发架构设计。公众号 HHFCodeRv 会定期发布原创文章,包括源码分析、业务思考、架构设计等。推荐大家关注 每隔一段时间就能看

[转帖]简单聊聊运维监控的其他用途

https://www.cnblogs.com/charlieroro/p/16434344.html 说到监控,一般都会聊到这三个基本维度:metrics、log和tracing,以及这几种常用的工具:Prometheus+grafana+alertmanager、ELK、jaeger。 监控通常

[转帖]关于统信UOS操作系统版本介绍

https://blog.csdn.net/qq43748322/article/details/120196200 当下信创产业发展的如火如荼,今天聊聊统信操作系统UOS 相比较于其它国内品牌操作系统,统信UOS的版本、分支比较多,下面为大家详细说说各UOS版本 目前统信UOS系统主要分为桌面版和

[转帖]Redis 运维实战 第07期:Hotkey

https://cloud.tencent.com/developer/article/1986830 上一节,我们聊到了 Redis 的 Bigkey,这节内容我们聊聊同样需要引起重视的 Hotkey。 1 背景 Hotkey 指某个时间段访问频率比较高的键值,对应的业务比如热点话题或者热点商品。