生产CPU 100% 问题排查解决方案
不知道大家在工作中有没有遇到过 线上代码CPU突然飙高,然后就会持久不下的情况?
如果有呢,大家肯定有解决方案了,如果没有的话可以来看看本篇教程,面试的时候可以吹一吹哦~
先给大家列几项可能Cpu 飙高的几种可能:
-
磁盘占用满,应用无法卡住无法运行(情况及其常见!!!我和朋友们都遇到过!!)
这种情况要怎么解决呢? 在服务器中 输入 df -h 命令 查看磁盘空间是否是100%状态
如果是100%状态,请删除一些log日志文件 / 删除无用的备份文件即可
- 程序中出现while死循环,没有设置中断条件
- 递归出现死循环,没有触发中断条件
- 程序设置的堆大小处在Full GC边缘,导致疯狂的Full GC 100%
- 其他
死循环导致CPU飙高
其中 第 2、3点是我们程序员人为的错误,这个可以在日志中找到相关的触发100%线程:
首先,我们得创造一个造成CPU100%的机会,here we go !
我们光速新建一个springboot 项目,然后光速写一个接口,流程是:
用户 -> 接口 -> 后端代码异常,导致cpu飙满
/**
* @author 隔壁老王
* @date 2021-03-05 14:51:54
* @description:
*/
@RestController
public class TestController {
@GetMapping("hi")
public String hi(){
cpu100();
return "隔壁老王";
}
public static void cpu100(){
while(true){
new Runnable() {
@Override
public void run() {
while(true){
for (int j = 999; j < 999999; j++) {
System.out.println(j * j * j * j * j);
}
}
}
}.run();
}
}
}
然后呢,我们maven打包(mvn clean package)发到服务器中,暂时用笨办法,不使用jkins / docker 部署,直接使用java -jar
开搞!项目启动!
然后是时候和服务器 say hi了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-siC4KEj7-1614932133559)(/Users/wangshuai/Library/Application Support/typora-user-images/image-20210305145919144.png)]