记一次生产CPU飙高排查(超300%)

本文讲述了在生产环境中Java程序因Disruptor的YieldingWaitStrategy导致CPU占用过高,通过排查和分析,作者建议改用BlockingWaitStrategy并展示了性能对比。

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

问题描述

在生产环境中部署java程序CPU飙到了300%以上,直接上图,开始排查
在这里插入图片描述

原因分析:

  1. 使用top指令查看飙高的进程PID
    在这里插入图片描述 2. 使用指令ps -mp pid -o THREAD,tid,time | sort -rn查看进程里面占用比较高的线程TID
    在这里插入图片描述
    前面几个居高不下,排查一下
  2. 然后将需要的线程ID转换为16进制格式,使用指令printf “%x\n” tid
    在这里插入图片描述
  3. 最后打印线程的堆栈信息 到了这一步具体看堆栈的日志来定位问题了,使用指令jstack pid |grep tid -A 30
    在这里插入图片描述
    可以看到是因为这个线程在占用所导致的,查看其他几个也是这个disruptor在搞的鬼
    百度了一下YieldingWaitStrategy,这是Disruptor下面的等待策略,怎么说呢,YieldingWaitStrategy性能是Disruptor里面最好,但是它的实现机制是让出cpu使用权,保证cpu不会空闲,从而使得cpu始终处于工作态,因此该策略会使用100%的CPU,建议慎用。修改成BlockingWaitStrategy策略
    直接看对比12641对比27323
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值