今天在编码的时候,回到web项目的浏览器刷新网页,发现请求迟迟下不来,查看控制台才发现,项目日志输出动都不动一下的,查看windows任务管理器,好家伙,idea的cpu和内存占用率双双突破90%,初步怀疑是代码问题,于是进行springboot项目假死分析。
1、查看java进程的pid生成stack文件。
首先在任务管理器下查看到当前pid为11848,任务管理器没有pid展示的可以在左上角名称列右键,选中pid就行。
然后根据这个pid,以管理员的身份在 C:\Windows\system32\ 文件夹下打开cmd窗口,输入以下命令得到stack文件。
jstack -l 11848 >c:/11848.stack
其中11848是刚查询到的pid,c:/11848.stack 是我将这个文件生成在c盘的根目录下并命名为11848.stack
2、使用Process Explorer分析properties
准备工具:Process Explorer
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
点击下载
下载完成之后解压得到Process工具,打开procexp.exe,根据pid找到进程。
右键选择properties…
选择Threads之后以CPU排序找到占用最高的TID
3、根据TID分析stack文件
找到TID之后,我们要先转换一下TID,把它转成16进制。
然后我们拿 40CC 这个十六进制数,打开生成的stack文件,查询。
最后我们可以在查询出的TID下面看到哪里的代码有问题(由于我的问题已经解决,这里就不复现)。
4、总结
根据查询出来的信息,最终定位到了一个方法,方法里面有一个近乎无限循环调用导致程序假死,暂时注释这个方法,程序恢复正常。