文章目录
- 一、生产环境 cpu 飙高产生的原因?
- 1. CAS 自旋没有控制自旋次数
- 2. 死循环
- 3. 阿里云 Redis 被注入挖矿程序
- 4. 服务器被 DDOS 工具攻击
- 二、windows环境下如何排查cpu飙高问题
- 2.1. 任务管理器
- 2.2. jvisualvm
- 三、环境下如何排查cpu飙高问题
- 3.1. 监控命令
- 3.2. 使用 arthas
- 3.3. 服务器监控系统
- 3.4. 第三方监控软件
- 四、linux环境下cpu飙高实战
- 4.1. cpu飙高测试类
- 4.2. 上传测试类
- 4.3. 编译测试类
- 4.4. 执行测试类
- 4.5. 使用arthas排查cpu飙高问题
一、生产环境 cpu 飙高产生的原因?
1. CAS 自旋没有控制自旋次数
解决方案:设定固定自旋次数
2. 死循环
解决方案: 全面考虑业务场景。设定退出标志条件。限制循环的次数
3. 阿里云 Redis 被注入挖矿程序
解决方案:Redis 端口不要能够被外网访问;
4. 服务器被 DDOS 工具攻击
解决方案:通过限流、ip 黑名单、图形验证码防止机器模拟攻击
二、windows环境下如何排查cpu飙高问题
2.1. 任务管理器
win操作系统,打开任务管理器,查看哪个进行占用cpu比较高
2.2. jvisualvm
使用jvisualvm.exe排查cpu标高问题
三、环境下如何排查cpu飙高问题
3.1. 监控命令
linux操作系统,查看进程占用cpu标高,使用
top -c
3.2. 使用 arthas
先找到服务器jvm运行的进程列表,然后,选择监控的指定jvm进程,最后,找出此进程中线程cpu占比前三的线程信息。
3.3. 服务器监控系统
比如说:阿里云或者腾讯云 CPU飙高,阈值70%~85% --发送告警邮件
服务器集群化,每一台服务器都会监控 --发送告警邮件
运维人员先知道那台服务器节点cpu飙高,例如:192.100.100.100 cpu飙高75%,通知开发负责人配合排查该服务器进行中哪一个线程导致cpu飙高。
3.4. 第三方监控软件
大的公司第三方监控软件,通过平台查询bpm+(xxx平台现有监控)
四、linux环境下cpu飙高实战
4.1. cpu飙高测试类
public class Java04 {public static void main(String[] args) {new Thread(()->{while (true){System.out.println("1111111");}},"录单-thread").start();}
}
4.2. 上传测试类
4.3. 编译测试类
javac Java04.java
4.4. 执行测试类
java Java04
springboot项目执行java -jar xxxjar包名称,发起模拟请求即可
4.5. 使用arthas排查cpu飙高问题
https://gblfy.blog.csdn.net/article/details/123308455