jvm命令

jmap

打印出pid的内存所有对象的使用情况(产生了哪些对象和数量),可以把内容输出到.bin文件,用MAT分析

参数

参数解释
-dump:[live,]format=b,file=\以二进制输出heap内容到文件,live:只输出活的对象
-finalizerinfo正在等待回收的对象
-heap打印heap概要信息
-histo[:live]打印每个class的实例数,内存占用,全限定名,内部类有*,live:活的对象
-permstat打印classload和jvm永久代,内部String的数量和占用内存数也会被打印出来
-F强迫线程没有响应的情况下打印,live失效

示例

jmap -dump:format=b,file=test.bin pid

和eclipse memory analysis tool(MAT)配合使用

1,模拟一个内存泄漏

这里写图片描述

2,使jmap命令

这里写图片描述

3,打开MAT -> File -> Open Heap Dump 进行Leak 内存泄漏分析

这里写图片描述

(当dump文件比较大的时候需要设置MAT目录下的ini文件 -Xmx默认内存调大)
可疑的大对象饼图,其中可以看到有一个对象占用了1.5G内存,进入下面的details:

这里写图片描述

看到大量的String对象导致了内存泄漏


jstack

打印出pid的ID或者Core文件或者远程调试服务的java堆栈信息。如果java程序崩溃生成core文件,jstack可以获得core文件的java stack和core stack信息,知道java是如何崩溃和在哪里崩溃的,jstack可以查看正在运行的程序的stack,在程序处于hung状态很有用。

参数

参数解释
-l打印关于锁的附加信息
-m打印java和native c++的栈信息

jstat

监控jvm,对堆的情况实时监控,包括:
- 类的加载和写在情况
- 查看young,old,perm的容量和使用情况
- 查看young,old,perm的垃圾收集情况
- 查看新生代中Eden和survior的容量分配

重要参数

参数解释
class类加载
compiler即时编译器情况
gc垃圾收集情况
gccause垃圾收集的原因和情况
gcutil垃圾收集情况

示例:

#获取20次 每次隔2秒
jstat -gc pid 2000 20 
#远程获取
jstat -gcutil 40496@remote.domain 1000 

结果解释:

S0CS1CS0US1UECEUOCOUPCPUYGCYGCTFGCFGCTGCT
Survior CapacitySurvior UsedEdenOldPermYoungYoungGCTimeFullGC

jinfo

或者jvm的本身的信息

jinfo pid

jvisualvm

可视化分析工具,可以分析jmap dump出的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值