1、找出Java进程ID,我部署在服务器上的Java应用名称为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
得到进程ID为21711
2、找出该进程内最耗费CPU的线程 top -Hp pid
![20140128214840_205.png](https://upload-images.jianshu.io/upload_images/5738996-9563d1eb598da761.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/12
TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21742的线程,用 printf "%x\n" 21742
得到21742的十六进制值为54ee,下面会用到。
jstack 21711 | grep 54ee 用来输出进程21711的堆栈信息,然后根据线程ID的十六进制值grep
"PollIntervalRetrySchedulerThread" prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait() [0x00007f94c6eda000]
jmap -heap 21711 查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
jmap -histo:live 21711 | more 查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jstat -gc 21711 250 4 输出的是GC信息,采样时间间隔为250ms,采样数为4: