线上问题排查总结
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中显示的线程在代码中搜索即可。具体代码具体分析。
Linux环境下排查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飙高的问题
进程号改变是因为我又重启了程序 通过打印出的信息可以在代码中搜索晓果冻线程名来查询到底是哪段代码出了问题在线实验学习arthas
评论区