jvm导出dump日志,分析内存情况

1. 查看内存情况 top

free 
top

在这里插入图片描述
pid=18426 占用内存比例很高

2. 导出dump日志

jmap -dump:format=b,file=heap.hprof 18426

当前目录:
在这里插入图片描述

3. 下载到本地,使用MAT打开进行分析

在这里插入图片描述
在这里插入图片描述
设置MAT内存大小:
在这里插入图片描述
几种图表现形式:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
内存泄露检测:
在这里插入图片描述
在这里插入图片描述
这里一个名称叫做 king-thread 的线程,持有了超过 99% 的对象,数据被一个 HashMap 所持有。
这个就是内存泄漏的点,因为我代码中对线程进行了标识,所以像阿里等公司的编码规范中为什么一定要给线程取名字,这个是有依据的,如果不取名
字的话,这种问题的排查将非常困难。
在这里插入图片描述

4. jmap Java内存映像工具

[root@iZuf6aveva4meli5nqltfnZ ty]# jmap -heap 18426
Attaching to process ID 18426, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2065694720 (1970.0MB)
   NewSize                  = 42991616 (41.0MB)
   MaxNewSize               = 688390144 (656.5MB)
   OldSize                  = 87031808 (83.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 95420416 (91.0MB)
   used     = 31189512 (29.74463653564453MB)
   free     = 64230904 (61.25536346435547MB)
   32.68641377543355% used
From Space:
   capacity = 226492416 (216.0MB)
   used     = 0 (0.0MB)
   free     = 226492416 (216.0MB)
   0.0% used
To Space:
   capacity = 229113856 (218.5MB)
   used     = 0 (0.0MB)
   free     = 229113856 (218.5MB)
   0.0% used
PS Old Generation
   capacity = 1045954560 (997.5MB)
   used     = 855781112 (816.1364669799805MB)
   free     = 190173448 (181.36353302001953MB)
   81.81819217844416% used

12211 interned Strings occupying 1177184 bytes.

-histo 打印每个 class 的实例数目,内存占用,类全名信息.
如果 live 子参数加上后,只统计活的对象数量.

[root@iZuf6aveva4meli5nqltfnZ ty]# jmap -histo:live 18426 | head -20


 num     #instances         #bytes  class name
----------------------------------------------
   1:       5702941      237256960  [C
   2:       5702926      136870224  java.lang.String
   3:       2569524      102780960  java.util.LinkedHashMap$Entry
   4:        965117       90681016  [B
   5:       1212225       77546376  [Ljava.util.HashMap$Node;
   6:       1212288       67888128  java.util.LinkedHashMap
   7:        961798       38471920  zipkin2.Endpoint
   8:        499998       35999856  zipkin2.Span
   9:        708724       28348960  java.util.TreeMap$Entry
  10:        498009       11952216  zipkin2.storage.InMemoryStorage$TraceIdTimestamp
  11:        709505       11352080  java.util.LinkedHashSet
  12:        501183        8018928  java.util.LinkedHashMap$LinkedEntrySet
  13:          9126        1599128  [Ljava.lang.Object;
  14:          9576        1063048  java.lang.Class
  15:         25867         827744  java.util.concurrent.ConcurrentHashMap$Node
  16:          3758         627096  [I
  17:           546         358176  io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueue

-dump 生成的堆转储快照

jmap -dump:live,format=b,file=heap.bin <pid>

5. jstat 监视虚拟机各种运行状态信息的命令行工具

常用参数:
-class (类加载器)
-compiler (JIT)
-gc (GC 堆状态)
-gccapacity (各区大小)
-gccause (最近一次 GC 统计和原因)
-gcnew (新区统计)
-gcnewcapacity (新区大小)
-gcold (老区统计)
-gcoldcapacity (老区大小)
-gcpermcapacity (永久区大小)
-gcutil (GC 统计汇总)
-printcompilation (HotSpot 编译统计)

每 250 毫秒查询一次进程 13616 垃圾收集状况,一共查询 10 次,那命令应当是:jstat-gc 13616 250 10

[root@iZuf6aveva4meli5nqltfnZ ty]# jstat -gc 18426
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
[root@iZuf6aveva4meli5nqltfnZ ty]# jstat -gc 18426 250 10
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446
223744.0 5632.0  0.0    0.0   91648.0  13095.4  1014784.0   835755.2  50392.0 47707.2 6656.0 6024.3     55    8.670   9     10.776   19.446

S0C:第一个幸存区(From 区)的大小
S1C:第二个幸存区(To 区)的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园(Eden)区的大小
EU:伊甸园(Eden)区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

6. 生产服务器推荐开启

-XX:-HeapDumpOnOutOfMemoryError 默认关闭,建议开启,在 java.lang.OutOfMemoryError 异常出现时,输出一个 dump 文件,记录当时的堆内存快照。
-XX:HeapDumpPath=./java_pid.hprof 用来设置堆内存快照的存储文件路径,默认是 java 进程启动位置。

java -jar -Xms1500m -Xmx1500m -Xmn1000m -XX:SurvivorRatio=8 jvm-1.0-SNAPSHOT.jar
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值