jvm如何排查生产环境cpu飙高的问题

本文详细介绍了生产环境中CPU飙高的常见原因,包括CAS自旋失控、死循环、Redis被注入恶意程序及DDoS攻击,并提供了Windows和Linux环境下排查CPU问题的方法,如任务管理器、jvisualvm、监控命令和arthas工具。同时,给出了实际的Java代码示例以模拟CPU飙高情况,并演示了如何使用arthas进行问题定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

一、生产环境 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.youkuaiyun.com/article/details/123308455

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gblfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值