CPU
通过jstack分析
- 我们先用ps命令找到对应进程的pid(如果你有好几个目标进程,可以先用top看一下哪个占用比较高)
- 接着用
top -H -p pid
来找到cpu使用率比较高的一些线程 - 然后将占用最高的pid转换为16进制
printf '%x\n' pid
得到nid - 接着直接在jstack中找到相应的堆栈信息
jstack pid |grep '0xnid' -C5 –color
- 可以看到我们已经找到了0xnid的堆栈信息,接着只要仔细分析一番即可
- 当然更常见的是我们对整个jstack文件进行分析,通常我们会比较关注WAITING和TIMED_WAITING的部分,BLOCKED就不用说了,我们可以使用命令
cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c
来对jstack的状态有一个整体的把握,如果WAITING之类的特别多,那么多半是有问题啦
频繁gc
- 使用
jstat -gc pid 1000
命令来对gc分代变化情况进行观察,1000表示采样间隔(ms),S0C/S1C、S0U/S1U、EC/EU、OC/OU、MC/MU分别代表两个Survivor区、Eden区、老年代、元数据区的容量
和使用量
- YGC/YGCT、FGC/FGCT代表YoungGC、FullGC的
耗时
和次数
- GCT代表
总耗