编写一段死循环程序,部署到linux服务器,以后台启动的方式启动,访问这段程序:
浏览器访问暴露出的请求接口:
观察Linux服务器cpu占用情况:
开始排查:
1.使用linux命令:top,查看cpu占用情况,降序排序:
得到进程:97101进程占用CPU使用率高
2.查看进程下线程占用情况:命令:top -p 进程id -H
3.使用jdk自带工具:jstack
打印进程堆栈信息:
jstack 97101【进程id】 > pid.log
- 刚刚查询到的进程下的线程占用率高的线程id,转换为16进制,然后到进程的堆栈信息日志表进行查询:
printf "%x" 97158 【线程id】
得到16进制数:17b86
- 打开刚刚生成的pid.log文件,查询 17b86 线程的堆栈信息:
查看到编写的项目文件,以及程序行号:
总结:使用linux命令top查询出占用cpu高的进程与线程信息,使用jdk自带的工具jstack
生成进程堆栈信息,进行查找问题所在。