Java进程故障排查思路及步骤
目录 故障现象 原因分析 CPU使用率极低 CPU使用率持续极高 内存占用很高 解决思路及处理方式 常用工具 查看网络连接 线程堆栈日志分析 堆内存快照分析 线上问题诊断 故障现象 Java进程出现问题,通常表现出如下现象: 1.CPU使用率持续极高/低 2.内存占用持续极高,甚至出现OOM(例如:进程正常运行一段时间之后突然不再响应请求,但是进程依然存在) 3.Web应用响应时间很长/超时,甚至不响应直接出现502(使用nginx作为反向代理) 响应时间长、超时,甚至不响应,这是最直观的表现;而CPU使用率极高或极低,频繁出现Full GC甚至OOM,需要借助系统日志或者监控辅助发现。 原因分析 响应时间长、超时,甚至不响应,这是一个综合性的故障结果,可能并不单纯是应用程序本身的问题。 首先,需要排查网络连通性是否正常; 其次,如果后端还接了数据存储系统,除了排查应用程序本身的问题之外,还需要排查应用所依赖的第三方组件是否出现了性能瓶颈,这通常可以从应用程序日志中看到错误信息。 在直观的故障表象背后是对应的系统指标异常,排查思路如下。 CPU使用率极低 通常是线程Hang住了,或者是出现了死锁,通过线程堆栈日志可以进行定位。 CPU使用率持续极高 先使用jstack命令查看堆栈信息,结合线程堆栈信息分析可能的原因: 业务代码很忙,甚至出现了死循环,这个从线程堆栈日志中可以