一愿伴、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.啟動與參數(shù)
./greys.sh <pid>[@IP:PORT]
默認只寫pid時,IP為127.0.0.1 PORT為3658渺蒿,IP:PORT形式一般用于遠程協(xié)助
進入交互頁面痢士,輸入help可查看命令
詳細參數(shù)說明:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf
3.常用命令
(1)monitor命令:對某類的方法調(diào)用進行監(jiān)控
monitor -c 10 ClassA MethodB
每十秒統(tǒng)計一次ClassA.MethodB 的調(diào)用情況,包括調(diào)用總數(shù)茂装,成功的個數(shù)怠蹂,失敗的個數(shù),RT情況等少态。
這個命令在實時流處理的程序中非常好用城侧,可以快速定位問題,而無需增加打印信息和重啟流處理進程
(2)trace命令:能方便的幫助你定位和發(fā)現(xiàn)因RT高而導(dǎo)致的性能問題缺陷彼妻,但其每次只能跟蹤一級方法的調(diào)用鏈路
trace -n 10 ClassA MethodB
打印10次ClassA.MethodB的調(diào)用鏈路及RT嫌佑,其中[2,1ms]表示當前節(jié)點的整體耗時2ms豆茫,當前節(jié)點在當前步驟的耗時1ms
(3)watch命令:能觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值歧强、拋出異常煞额、入?yún)?/strong>
watch -b ClassA MethodB '"params[0]="+params[0]'
打印每次調(diào)用ClassA.MethodB之前的第一個參數(shù)的值
watch -s xxx.expand.ParseProducer parse returnObj -x 1
打印每次調(diào)用ClassA.MethodB之后的返回的結(jié)果的層級遍歷
二脓斩、jstat
jstat是JDK自帶的性能分析工具口注,主要用來實時查看JVM堆內(nèi)各個部分的使用量
常用命令為:jstat -gcutil 30476 5000
30476為pid 5000為間隔時間篙贸,結(jié)果如下圖:
下面為每個部分代表的意義
內(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 的時間 |
FGC | Old Generation Full GC 的數(shù)目 |
FGCT | Old Generation Full GC 的時間 |
GCT | YGCT+FGCT |
三、jmap
主要用來得到運行java程序的內(nèi)存分配的詳細情況茅特。
常用命令有兩個:
(1) 打印heap的概覽情況和使用情況忘分,和jstat -gcutil類似
jmap -heap <pid>
(2) 打印堆內(nèi)存中對象的數(shù)量及大小,可用來實時查看哪些對象占用資源過度白修。
jmap -histo <pid> | head -n 23