一、CPU飙高产生的原因
1、CAS修改值失败,没有控制自旋次数,导致一直自旋不断重试,非常消耗cpu资源
2、云服务器被黑客攻击,植入了挖矿程序:端口不能够被外网访问
3、程序死循环:控制循环次数
4、服务器被DDOS攻击:限流、ip黑名单、图形验证码
二、模拟生产环境cpu飙高
(1)模拟飙高的代码,该代码不需要包名
public class Test {
public static void main(String[] args) {
new Thread(()->{
while (true)
System.out.println("测试测试");
},"TestThread").start();
}
}
(2)上传Test.java文件到Linux服务器下,/usr/local
(3)编译Test.java并运行
执行命令:javac Test.java
运行Test.class文件
执行命令:java -cp . Test
三、使用Arthas工具排查
下载arthas-boot.jar
,然后用java -jar
的方式启动:
执行命令:curl -O https://arthas.aliyun.com/arthas-boot.jar
启动:java -jar arthas-boot.jar
执行命令:dashboard
从图中能很清楚的看到TestThread线程 cpu占比80.22%
也可以用命令:thread -n 3
根据查询出来的线程名称去定位实际业务代码
点击 Arthas命令 查看其他命令。
以上就是Linux环境下排查CPU飙高的方法。