1剔氏、找出Java進(jìn)程ID酗宋,我部署在服務(wù)器上的Java應(yīng)用名稱為mrf-center:
ps -ef | grep mrf-center | grep -v grep
root 21711 1 1 14:47 pts/3 00:02:10 java -jar mrf-center.jar
得到進(jìn)程ID為21711
2威恼、找出該進(jìn)程內(nèi)最耗費(fèi)CPU的線程 top -Hp pid
Java線程耗費(fèi)的CPU時(shí)間品姓,CPU時(shí)間最長的是線程ID為21742的線程,用 printf "%x\n" 21742
得到21742的十六進(jìn)制值為54ee箫措,下面會(huì)用到腹备。
jstack 21711 | grep 54ee 用來輸出進(jìn)程21711的堆棧信息,然后根據(jù)線程ID的十六進(jìn)制值grep
"PollIntervalRetrySchedulerThread" prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait() [0x00007f94c6eda000]
jmap -heap 21711 查看進(jìn)程堆內(nèi)存使用情況斤蔓,包括使用的GC算法植酥、堆配置參數(shù)和各代中堆內(nèi)存使用情況
jmap -histo:live 21711 | more 查看堆內(nèi)存中的對(duì)象數(shù)目、大小統(tǒng)計(jì)直方圖弦牡,如果帶上live則只統(tǒng)計(jì)活對(duì)象
jstat -gc 21711 250 4 輸出的是GC信息友驮,采樣時(shí)間間隔為250ms,采樣數(shù)為4: