一、Greys
Greys是专业的JVM的业务问题定位工具
1、下载与安装
wget http://ompc.oss.aliyuncs.com/greys/release/greys-stable-bin.zip
unzip greys-stable-bin.zip
cd greys
sh ./install-local.sh
2.启动与参数
./greys.sh <pid>[@IP:PORT]
默认只写pid时,IP为127.0.0.1 PORT为3658,IP:PORT形式一般用于远程协助
进入交互页面,输入help可查看命令
详细参数说明:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf
3.常用命令
(1)monitor命令:对某类的方法调用进行监控
monitor -c 10 ClassA MethodB
每十秒统计一次ClassA.MethodB 的调用情况,包括调用总数,成功的个数,失败的个数,RT情况等。
这个命令在实时流处理的程序中非常好用,可以快速定位问题,而无需增加打印信息和重启流处理进程
(2)trace命令:能方便的帮助你定位和发现因RT高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路
trace -n 10 ClassA MethodB
打印10次ClassA.MethodB的调用链路及RT,其中[2,1ms]表示当前节点的整体耗时2ms,当前节点在当前步骤的耗时1ms
(3)watch命令:能观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参
watch -b ClassA MethodB '"params[0]="+params[0]'
打印每次调用ClassA.MethodB之前的第一个参数的值
watch -s xxx.expand.ParseProducer parse returnObj -x 1
打印每次调用ClassA.MethodB之后的返回的结果的层级遍历
二、jstat
jstat是JDK自带的性能分析工具,主要用来实时查看JVM堆内各个部分的使用量
常用命令为:jstat -gcutil 30476 5000
30476为pid 5000为间隔时间,结果如下图:
image.png
下面为每个部分代表的意义
内容 | 意义 |
---|---|
S0 | Survivor0区使用百分比 |
S1 | Survivor1区使用百分比 |
E | Eden区使用百分比 |
O | Old区使用百分比 |
P | Perm区使用百分比 |
YGC | Young Generation Minor GC 的数目 |
YGCT | Young Generation Minor GC 的时间 |
FGC | Old Generation Full GC 的数目 |
FGCT | Old Generation Full GC 的时间 |
GCT | YGCT+FGCT |
三、jmap
主要用来得到运行java程序的内存分配的详细情况。
常用命令有两个:
(1) 打印heap的概览情况和使用情况,和jstat -gcutil类似
jmap -heap <pid>
(2) 打印堆内存中对象的数量及大小,可用来实时查看哪些对象占用资源过度。
jmap -histo <pid> | head -n 23