CPU过高
使用top命令查看占用CPU过高的进程。
导出CPU占用高进程的线程栈。
jstack pid >> java.txt
Java 内存过高的问题排查
1.分析OOM异常的原因,堆溢出?栈溢出?本地内存溢出?
2.如果是堆溢出,导出堆dump,并对堆内存使用有个整体了解;
3.找到最有可能导致内存泄露的元凶,通常也就是消耗内存最多的对象;
4.使用辅助工具对dump文件进行分析;
通过jmap dump内存快照。如果是线上环境,注意dump之前必须先将流量切走,否则大内存dump是直接卡死服务。
jmap -histo | head -20
就可以查看某个pid的java服务占用内存排名前20的类
Full GC的排查
jstat -gc 4383 5000
即每5秒一次显示进程号为4383的java进程的GC情况, -XX:+PrintGCDetails 用来打印详细的GC信息。
线程阻塞
用jstack命令打出这个进程的全部线程堆栈。拿到线程dump文件之后,搜索自己的worker名字。