线上问题排查总结
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
评论区