你是否会头疼一下问题
- 线上CPU突然飙升,领导让你排查,心慌怎么办?
- 线上发布之后内存升高,出现了FGC怎么分析?
- 出现了死锁,死循环该怎么排查?
线上问题排查示例
导出堆栈文件
通过jmap命令或者jstack命令导出相关堆栈或者内存dump文件,这里以导出线程堆栈文件进行分析演示。
jstack 21244 > 21244cpu.log
# 该命令对于线上环境基本没啥影响,可以放心导出
这时候导出拿到了21244cpu.log文件之后,就可以进行离线分析了。
通过在线分析工具导入堆栈文件
分析地址:https://heaphero.io/index.jsp
直接导入刚才导出的文件,点击分析即可。
在线分析工具相关截图
分析完成之后,可以看到以下结果,非常清晰明了。
可以看到当前等待以及线程等待的数量,并且可以看到线程的状态等。
运行分析截图
不仅如此,该工具可以查看是否存在死锁,以及支持火焰图,分析程序的耗时,性能等问题。
分析火焰图
当线上出现CPU过高的情况,可以看看具体哪些线程引起,可以查看详情了解更为细致的调用过程。
高CPU调用分析
实际操作结果展示:
为了模拟内存溢出,idea中设置vm参数
image.png
实际模拟操作,我这里用的是上传大量文件数据解析。
image.png
如图,生成文件,Heap dump file created [739939909 bytes in 13.760 secs]
在项目根目录下,使用上面的在线分析网站,直接导入即可。
image.png
网友评论