一、Greys
Greys是專業(yè)的JVM的業(yè)務(wù)問題定位工具
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.啟動(dòng)與參數(shù)
./greys.sh <pid>[@IP:PORT]
默認(rèn)只寫pid時(shí),IP為127.0.0.1 PORT為3658,IP:PORT形式一般用于遠(yuǎn)程協(xié)助
進(jìn)入交互頁面,輸入help可查看命令
詳細(xì)參數(shù)說明:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf
3.常用命令
(1)monitor命令:對(duì)某類的方法調(diào)用進(jìn)行監(jiān)控
monitor -c 10 ClassA MethodB
每十秒統(tǒng)計(jì)一次ClassA.MethodB 的調(diào)用情況,包括調(diào)用總數(shù),成功的個(gè)數(shù),失敗的個(gè)數(shù),RT情況等。
這個(gè)命令在實(shí)時(shí)流處理的程序中非常好用,可以快速定位問題,而無需增加打印信息和重啟流處理進(jìn)程
(2)trace命令:能方便的幫助你定位和發(fā)現(xiàn)因RT高而導(dǎo)致的性能問題缺陷,但其每次只能跟蹤一級(jí)方法的調(diào)用鏈路
trace -n 10 ClassA MethodB
打印10次ClassA.MethodB的調(diào)用鏈路及RT,其中[2,1ms]表示當(dāng)前節(jié)點(diǎn)的整體耗時(shí)2ms,當(dāng)前節(jié)點(diǎn)在當(dāng)前步驟的耗時(shí)1ms
(3)watch命令:能觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)?/strong>
watch -b ClassA MethodB '"params[0]="+params[0]'
打印每次調(diào)用ClassA.MethodB之前的第一個(gè)參數(shù)的值
watch -s xxx.expand.ParseProducer parse returnObj -x 1
打印每次調(diào)用ClassA.MethodB之后的返回的結(jié)果的層級(jí)遍歷
二、jstat
jstat是JDK自帶的性能分析工具,主要用來實(shí)時(shí)查看JVM堆內(nèi)各個(gè)部分的使用量
常用命令為:jstat -gcutil 30476 5000
30476為pid 5000為間隔時(shí)間,結(jié)果如下圖:

下面為每個(gè)部分代表的意義
| 內(nèi)容 | 意義 |
|---|---|
| S0 | Survivor0區(qū)使用百分比 |
| S1 | Survivor1區(qū)使用百分比 |
| E | Eden區(qū)使用百分比 |
| O | Old區(qū)使用百分比 |
| P | Perm區(qū)使用百分比 |
| YGC | Young Generation Minor GC 的數(shù)目 |
| YGCT | Young Generation Minor GC 的時(shí)間 |
| FGC | Old Generation Full GC 的數(shù)目 |
| FGCT | Old Generation Full GC 的時(shí)間 |
| GCT | YGCT+FGCT |
三、jmap
主要用來得到運(yùn)行java程序的內(nèi)存分配的詳細(xì)情況。
常用命令有兩個(gè):
(1) 打印heap的概覽情況和使用情況,和jstat -gcutil類似
jmap -heap <pid>
(2) 打印堆內(nèi)存中對(duì)象的數(shù)量及大小,可用來實(shí)時(shí)查看哪些對(duì)象占用資源過度。
jmap -histo <pid> | head -n 23