一、查看堆信息

jmap -heap 33146

Debugger attached successfully.
Server compiler detected.
JVM version is 25.251-b08 using thread-local object allocation.
Garbage-First (G1) GC with 2 thread(s) Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 5265948672 (5022.0MB)
NewSize = 1363144 (1.2999954223632812MB)
MaxNewSize = 3158310912 (3012.0MB)
OldSize = 5452592 (5.1999969482421875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 536870912 (512.0MB)
CompressedClassSpaceSize = 528482304 (504.0MB)
MaxMetaspaceSize = 536870912 (512.0MB)
G1HeapRegionSize = 2097152 (2.0MB) Heap Usage:
G1 Heap:
regions = 2511
capacity = 5265948672 (5022.0MB)
used = 5126798672 (4889.29621887207MB)
free = 139150000 (132.7037811279297MB)
97.35755115237097% used
G1 Young Generation:
Eden Space:
regions = 1438
capacity = 3156213760 (3010.0MB)
used = 3015704576 (2876.0MB)
free = 140509184 (134.0MB)
95.54817275747509% used
Survivor Space:
regions = 8
capacity = 16777216 (16.0MB)
used = 16777216 (16.0MB)
free = 0 (0.0MB)
100.0% used
G1 Old Generation:
regions = 1040
capacity = 2092957696 (1996.0MB)
used = 2092219728 (1995.2962188720703MB)
free = 737968 (0.7037811279296875MB)
99.96474042445242% used 38177 interned Strings occupying 4297560 bytes.

二、Heap Configuration参数介绍

1、MinHeapFreeRatio = 40

空闲堆空间的最小百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的区间为0到100,默认值为 40。如果HeapFreeRatio < MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后

2、MaxHeapFreeRatio = 70

空闲堆空间的最大百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的区间为0到100,默认值为 70。如果HeapFreeRatio > MaxHeapFreeRatio,则需要进行堆缩容,缩容的时机应该在每次垃圾回收之后。

3、MaxHeapSize = 4294967296 (4096.0MB)

JVM 堆空间允许的最大值。

4、NewSize = 1363144 (1.2999954223632812MB)

JVM 新生代堆空间的默认值。

5、MaxNewSize = 2576351232 (2457.0MB)

JVM 新生代堆空间允许的最大值。

6、OldSize = 5452592 (5.1999969482421875MB)

JVM 老年代堆空间的默认值。

7、NewRatio = 2

新生代(2个Survivor区和Eden区 )与老年代(不包括永久区)的堆空间比值,表示新生代:老年代=1:2。

8、   SurvivorRatio = 8

两个Survivor区和Eden区的堆空间比值为 8,表示 S0 : S1 :Eden = 1:1:8。

9、   MetaspaceSize = 21807104 (20.796875MB)

JVM 元空间的默认值。

10、   CompressedClassSpaceSize = 1073741824 (1024.0MB)

MaxMetaspaceSize         = 17592186044415 MB

JVM 元空间允许的最大值。

11、G1HeapRegionSize = 1048576 (1.0MB)

在使用 G1 垃圾回收算法时,JVM 会将 Heap 空间分隔为若干个 Region,该参数用来指定每个 Region 空间的大小。

三、Heap Usage参数介绍

1、G1 Heap:
   regions  = 4096
   capacity = 4294967296 (4096.0MB)
   used     = 5242880 (5.0MB)
   free     = 4289724416 (4091.0MB)
   0.1220703125% used

G1 的 Heap 使用情况,该 Heap 包含 4096 个 Region,结合上文每个 RegionSize=1M,因此 Capacity = Regions * RegionSize = 4096 * 1M = 4096M,已使用空间为 5M,空闲空间为 4091M,使用率为 0.12%

2、G1 Young Generation:
Eden Space:
   regions  = 6
   capacity = 27262976 (26.0MB)
   used     = 6291456 (6.0MB)
   free     = 20971520 (20.0MB)
   23.076923076923077% used

G1 的 Eden 区的使用情况,总共使用了 6 个 Region,结合上文每个 RegionSize=1M,因此 Used = Regions * RegionSize = 6 * 1M = 6M,Capacity=26M表名当前 Eden 空间分配了 26 个 Region,使用率为 23%。

3、G1 Young Generation:
Survivor Space:
   regions  = 0
   capacity = 0 (0.0MB)
   used     = 0 (0.0MB)
   free     = 0 (0.0MB)
   0.0% used

G1 的 Survivor 区的使用情况,同 Eden区。

4、G1 Old Generation:
   regions  = 0
   capacity = 241172480 (230.0MB)
   used     = 0 (0.0MB)
   free     = 241172480 (230.0MB)
   0.0% used

G1 的 老年代的使用情况,同 Eden区。

四、分析方法

1、获取服务器运行程序的pid

jps -lm

2、查看进程内存信息

pmap -x 1| sort -rn -k3|head -20

3、查看jvm堆信息

jmap -heap pid

4、导出堆内存快照

jmap -dump:live,format=b,file=umetric.hprof pid

5、下载文件到本地

sz umetric.hprof

6、本地分析

jhat -J-d64 -J-mx2g -port 5001 umetric.hprof

参数解释  -J-d64:因为jetty进程是在64位的系统上运行,所以需要指定64位。

-J-mx2g:表示jhat进程最多可以分配2G的堆内存,这就是为什么jhat可以分析超大文件的原因了,因为可以指定堆内存大小。

-port 5001:jhat分析完毕之后,会启动一个web服务,可以通过指定端口来访问,这就是指定的端口。

使用:浏览器访问本地5001端口,拉到最下面有入口可以看到类引用情况

7、查看某个pid资源使用情况,k2是引用个数,k3是费资源大小

jmap -histo pid|sort -rn -k2|head -20

参考文章:https://blog.csdn.net/claram/article/details/104635114

JVM堆内存分析,分析工具jmap heap的更多相关文章

  1. JVM堆内存泄露分析

      一.背景 公司有一个中间的系统A可以对接多个后端业务系统B,一个业务系统以一个Namespace代表, Namespace中包含多个FrameChannel(用holder保存),表示A连接到业务 ...

  2. 《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读

    堆内存使用分析,GC 日志解读 重要的东东 在Java中,对象实例都是在堆上创建.一些类信息,常量,静态变量等存储在方法区.堆和方法区都是线程共享的. GC机制是由JVM提供,用来清理需要清除的对象, ...

  3. 转: 关于Linux与JVM的内存关系分析

    转自: http://tech.meituan.com/linux-jvm-memory.html Linux与JVM的内存关系分析 葛吒2014-08-29 10:00 引言 在一些物理内存为8g的 ...

  4. 转: Linux与JVM的内存关系分析

    Linux与JVM的内存关系分析 引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使 ...

  5. 【转】JVM 堆内存设置原理

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  6. [转]JVM 堆内存设置原理

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  7. JVM 堆内存设置原理

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  8. JVM 堆内存设置原理(转)

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  9. JVM堆内存监测的一种方式,性能调优依旧任重道远

    上月,由极客邦.InfoQ和听云联合主办2016 APMCon中国应用性能管理大会圆满落下帷幕.会上,Java冠军Martijn Verburg进行了一场Java and the Machine的分享 ...

  10. jvm堆内存和GC简介

    最近经常遇到jvm内存问题,觉得还是有必要整理下jvm内存的相关逻辑,这里只描述jvm堆内存,对外内存暂不阐述. jvm内存简图 jvm内存分为堆内存和非堆内存,堆内存分为年轻代.老年代,非堆内存里只 ...

随机推荐

  1. golang日志库之log

    查看基本使用: package main import ( "log" ) type User struct { Name string Age int } func main() ...

  2. 题解 ICPC 2019 SH 区域赛 F 树上简单问题

    题解 ICPC 2019 SH 区域赛 F 树上简单问题 CF的Gym里没找着 牛客的题目链接 首先这个题多测非常SB, 每次都要清空, 需要特别注意. 树剖应该都会吧, Defad之后也会发博客讲解 ...

  3. 数据万象推出智能检索MetaInsight,现已开启限时公测

    海量文件的分析统计一直是对象存储COS的热点需求,伴随AIGC飞速迭代发展,在众多不同模态素材的海洋中,用户也急需更高效地管理和利用多媒体内容,打破传统搜索的桎梏. 数据万象推出的智能检索 MetaI ...

  4. 尝试新的 System.Text.Json 源生成器

    尝试新的 System.Text.Json 源生成器 在 .NET 6.0 的预览版中,我们使用 System.Text.Json 发布了一个新的 C# source generator 来帮助改进应 ...

  5. Elm 和 Jetpack Compose 殊途同归及 MVVM 缺点分析

    Html.lazy · An Introduction to Elm 可能搞 vdom 的都会到 lazy renderer 这一步,react 可能也可以这么搞或者已经这么搞了我不知道,Elm 提到 ...

  6. 永久告别mac屏幕涂层脱落

    转载:https://www.feng.com/post/11380203 我从2011年开始使用Mac book pro电脑,到现在的2016款已经是第三台了,我从来都不会被涂层脱落这个问题困扰,我 ...

  7. Qt开源作品16-通用无边框拖动拉伸

    一.前言 相信各位CS结构开发的程序员,多多少少都遇到过需要美化界面的事情,一般都不会采用系统的标题栏,这样就需要无边框标题栏窗体,默认的话无边框的标题栏都不支持拉伸和拖动的,毕竟去掉了标题栏则意味着 ...

  8. IDEA中导入其它由Maven管理的java web项目并运行,提示“Error:(3, 38) java: 程序包org.springframework.stereotype不存在”问题的解决

    现象描述: IDEA中导入其它由Maven管理的java web项目并运行,提示"Error:(3, 38) java: 程序包org.springframework.stereotype不 ...

  9. C# – XmlSerializer:字符串“2020-07-31 09:29:16”不是有效的 AllXsd 值。

    C#中使用XmlSerializer对字符串进行反序列化时,提示:字符串"2020-07-31 09:29:16"不是有效的AllXsd值. 原因: 先说下为什么会出现这样的错误, ...

  10. Eclipse中如何将web应用部署到tomcat

    第1种方法: 将workspace下的复制到tomcat的webapp下(我看度还是算了,看着都觉得麻烦). 第2种方法:总体思路就是:(1)先为web应用创建Tomcat Server:(2)再将w ...