应用重启后,CPU和Load飙升的问题分析与解决方案

↑↑↑ 欢迎 点赞、关注、收藏!!!,10 年 IT 行业老鸟,持续分享更多 IT 干货

目录

11-应用重启后,CPU和Load飙升的问题分析与解决方案

问题表现

排查过程

1、排查方向

2、分析

解决问题

1、优化 JIT 编译效率

2、流量控制

3、配置修改


11-应用重启后,CPU和Load飙升的问题分析与解决方案

参考:https://www.yuque.com/hollis666/go2k1v/uq7bul


问题表现

image-20250515220252045

  1. 现象特征

    • 问题仅在发布后短暂出现,随后自动恢复

    • 与流量高峰相关,请求量大时现象更显著

  2. 核心表现

    • 触发场景:应用重启后几分钟内

    • 指标异常:

      CPU 利用率飙升至70%

      Load 值达11(持续数分钟后恢复)

    • 业务影响:接口响应时间(RT)升高,调用方超时频发


排查过程

1、排查方向
排查阶段怀疑对象验证结果关键工具
初步排查应用代码缺陷无异常(堆栈/Dump/火焰图)Arthas、JProfiler
基础设施排查虚拟机/容器/宿主机问题无变化(更换配置/镜像)Docker、宿主机监控
JVM参数排查JDK版本/GC配置无异常(堆内存/收集器)GC日志、JVM参数分析
最终定位JIT编译延迟热点代码未及时优化JDK Flight Recorder (JFR)
2、分析

常规执行过程

java 文件 -- 通过javac --> 编译成 class文件,

class 字节码 -- 再通过解释器 --> 翻译成机器指令,

JIT 机制分析

JIT 优化器会基于热点代码检测,把热点代码直接翻译成机器语言。

方便后续直接执行。这样,大大提升了效率。

问题根源分析

  • 应用刚刚重启后,并未触发 JIT。这时,所有请求依赖解释执行,CPU资源消耗很高。

  • 当请求量大时,解释器持续工作导致 CPU/Load 飙升,直至JIT完成优化。


解决问题

这种问题的两种解决思路

  1. 提升JIT优化的效率

  2. 降低瞬时请求量

1、优化 JIT 编译效率
方案名称技术原理实现案例效果
JWarmUp记录上次运行编译信息,启动时预加载机器码Dragonwell JDK跳过解释阶段,启动性能提升

2、流量控制
策略名称实现方式核心逻辑
渐进式流量通过负载均衡分阶段放量小流量触发JIT优化,再逐步扩容

3、配置修改
 # 开启JWarmUp(Dragonwell JDK)
 -XX:+UseJWarmUp -XX:JWarmUpLogPath=/path/to/jwarmup.log
 # 调整JIT编译阈值(降低热点代码识别门槛)
 -XX:CompileThreshold=1000

image-20250515222211468

↑↑↑ 欢迎 点赞、关注、收藏!!!,10 年 IT 行业老鸟,持续分享更多 IT 干货

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写文章的大米

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

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

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

打赏作者

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

抵扣说明:

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

余额充值