部署的springboot项目所在的Linux服务器CPU占用过高,排查解决的流程。
1.ps aux | grep jar
查看系统部署的项目进程信息
2.top
top命令查看项目进程所占的cpu占存比
3.jps -lv
通过jps -lv输出,配合上面的pid定位到出现问题的具体应用
jps
jps -l 输出主类或者jar的完全路径名
jps -v 输出jvm参数
jps -q 仅仅显示java进程号
jps -m 输出JVM启动时传递给main()的参数
jps -lv 显示jar+jvm参数,一般部署多个服务就要用这个,边看服务名边看对应jvm参数
jps -mlv 即m+l+v的都输出来
3.top -p pid
执行top -p pid 单独监控该进程
4.监控界面输入H
通过输入H,获取当前进程下所有的线程信息,找到CPU消耗特别高的线程编号。由于Java是多线程程序,如果我们只知道进程id还不足以找到出现问题的线程。因此这里需要借助top命令的H交互模式,找到真正CPU占用过高的线程。
5. jstack输出线程信息
jstack 进程pid >> stack.txt
6.将pid换算成16进制
printf "%x\n" pid
7.打开刚刚生成的stack日志文件
该日志文件一般在执行该行命令时所在的文件层级下,Crtl+f查找关键字 11679
8.显示出内存占用前10的进程信息
ps -eo pid,cmd,%mem,%cpu --sort=-%mem | head