Cpu
飙高可能的原因CAS
自旋 没有控制自旋次数;乐观锁cpu
飙高的问题;控制循环次数redis
被注入挖矿程序;端口像公网暴露;Redis
端口不要被外网访问,ip黑名单DDOS
攻击导致cpu
飙高。限流ip
、黑名单,图形验证码。Windows
系统排查cpu
飙高方法制造死循环让cpu
飙高的代码
package com.company;
/**
* @author 晓果冻
* @version 1.0
* @date 2021/6/23 7:45
*/
public class Demo {
public static void main(String[] args) {
new Thread(()->{
while(true){
System.out.println("11111");
}
},"晓果冻").start();
}
}
指定线程名称
创建新的线程的时候最好指定它的名称不然默认的都是Thread-0、Thread-1这样的,指定名称,在排查问题时也方便在直接在项目
中搜索是哪段代码出了问题。
用jvisualvm
排查
jvisualvm是jdk自带的工具,在bin目录下,jvisualvm.exe
锁定犯罪线程-晓果冻,这就是第二步为什么指定线程名称的原因
根据jvisualvm
中显示的线程在代码中搜索即可。具体代码具体分析。
cpu
飙高的问题先模拟一种死锁的情况,让cpu
飙高
/**
* @author 晓果冻
* @version 1.0
* @date 2021/6/23 7:45
*/
public class Demo {
public static void main(String[] args) {
new Thread(()->{
while(true){
System.out.println("11111");
}
},"晓果冻").start();
}
}
上传到我们的服务器,测试下
arthas-boot.jar 我们的分析工具 阿狸的
Demo.java 模拟死循环让cpu飙升的代码
编译,运行
启动arthas
分析哪个进程占用cpu
高
[1]:序号
8781 Demo:进程号,项目名
通过arthas
的命令分析cpu
飙高的问题
进程号改变是因为我又重启了程序
通过打印出的信息可以在代码中搜索晓果冻线程名来查询到底是哪段代码出了问题