java jmap 分析_Java堆分析 jmap+jhat

Java堆分析 jmap+jhat

最近在使用DataSync做数据迁移,执行了10天+,进程还未结束,也未出现错误日志,所以就看看是不是哪里卡住了...

jmap命令:

-dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

-finalizerinfo 打印正等候回收的对象的信息.

-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

-h | -help 打印辅助信息

-J 传递参数给jmap启动的jvm.

使用步骤:

>>>先找到pid(linux环境)

ps -ef|grep java

20200309114823974i0604crn9ri4kl1_5.png

由上图可知 pid为 : 19893

1.将JVM的堆内容输入到当前目录的dump.log文件中( live子选项是可选的,假如指定live选项,那么只输出活的对象到文件. )

jmap -dump:live,file=dump.log 19893

输出结果:

Dumping heap to /app/installation/DataSync/logs/dump.log ...

Heap dump file created

20200309114823974i0604crn9ri4kl1_0.png

2.使用jhat命令分析dump.log文件

jhat dump.log

输出结果:

Reading from dump.log...

Dump file created Mon Mar 09 09:48:50 CST 2020

Snapshot read, resolving...

Resolving 110219 objects...

Chasing references, expect 22 dots......................

Eliminating duplicate references......................

Snapshot resolved.

Started HTTP server on port 7000

Server is ready.

20200309114823974i0604crn9ri4kl1_3.png

使用浏览器访问堆分析地址: http://localhost:7000 (localhost替换为服务器ip)

20200309114823974i0604crn9ri4kl1_4.png

将右侧的下拉框拖到最后:

Other Queries

All classes including platform #显示出堆中包含的所有的类

Show all members of the rootset #从根集能引用到的对象

Show instance counts for all classes (including platform) #显示所有的实例数量(包括平台)

Show instance counts for all classes (excluding platform) #显示所有实例的数量(平台除外)

Show heap histogram #显示堆的统计信息

Show finalizer summary #正在回收的对象统计

Execute Object Query Language (OQL) query #执行对象查询语句

20200309114823974i0604crn9ri4kl1_1.png

我们主要看一下堆的统计信息:

20200309114823974i0604crn9ri4kl1_2.png

3.-finalizerinfo 打印正等候回收的对象的信息.

eg: jmap -finalizerinfo 19893

输出结果:

Attaching to process ID 19893, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 25.221-b11

Number of objects pending for finalization: 0

4.-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

eg: jmap -heap 19893

输出结果:

Attaching to process ID 19893, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 25.221-b11

using thread-local object allocation.

Parallel GC with 8 thread(s)

Heap Configuration:

MinHeapFreeRatio = 0 # -Xmn 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,这里设置为0%,JVM就会增大堆直到-Xmx的最大限制.

MaxHeapFreeRatio = 100 # -Xmx 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,这里设置为100%,JVM会减少堆直到 -Xms的最小限制

MaxHeapSize = 8392802304 (8004.0MB) #

NewSize = 175112192 (167.0MB) #年轻代大小

MaxNewSize = 2797600768 (2668.0MB) #最大年轻代大小

OldSize = 351272960 (335.0MB) #

NewRatio = 2 #年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)

SurvivorRatio = 8 # Eden区与Survivor区的大小比值

MetaspaceSize = 21807104 (20.796875MB)

CompressedClassSpaceSize = 1073741824 (1024.0MB)

MaxMetaspaceSize = 17592186044415 MB

G1HeapRegionSize = 0 (0.0MB)

Heap Usage:

PS Young Generation

Eden Space:

capacity = 174063616 (166.0MB)

used = 2929112 (2.7934188842773438MB)

free = 171134504 (163.20658111572266MB)

1.6827824604080384% used

From Space:

capacity = 524288 (0.5MB)

used = 0 (0.0MB)

free = 524288 (0.5MB)

0.0% used

To Space:

capacity = 524288 (0.5MB)

used = 0 (0.0MB)

free = 524288 (0.5MB)

0.0% used

PS Old Generation

capacity = 378535936 (361.0MB)

used = 6553576 (6.249977111816406MB)

free = 371982360 (354.7500228881836MB)

1.7312955988411098% used

11013 interned Strings occupying 980480 bytes.

5.-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

eg: jmap -histo:live 19893

6.-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

-h | -help 打印辅助信息

-J 传递参数给jmap启动的jvm.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值