要想遇到个CPU过高也不是件容易的事啊,先模拟下吧
@GetMapping("/letCpuBuisy")
public void letCpuBuisy(){
int i=0;
while(true) {
i++;
}
}
发包-->运行-->请求
top命令看一下。它来了 它来了!
可以看到cpu100%了,pid是135243的,怎么破?
如果我们要是手动解决,步骤如下
1.top查看cpu情况或者查看进程中最耗cpu的子线程 top -p pid -H
2.ps -ef|grep 线程id,可以看到是哪个服务的
3.将线程id转换为16进制输出:printf "x \n" pid 得到nid
4.jstat查看具体出现问题的代码:jstack 刚刚的pid |grep 刚刚的nid -A 30
然后,就改掉吧
然后在网上发现了另一个封装后的工具也蛮好用的,推荐一下 GitHub - jiankunking/useful-scripts: 🐌 useful scripts for making developer's everyday life easier and happier, involved java, shell etc.
gitee的地址(主要gitee下载快🤫):useful-scripts: useful scripts for making developer's everyday life easier and happier, involved java, shell etc.
建个文件夹下载下
cd useful-scripts
cd checkout release
git pull
./show-busy-java-threads #这步就是执行分析脚本了
分析截图如下
果然,135243这个java process占用了100%,在root用户下 ,代码TestCtrl46行,letCpuBusy方法。已经很具体了……😲
然后就去解决吧
下面还打印了其他东西,无关紧要就没关注