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

问题描述

在生产环境中部署java程序CPU飙到了300%以上,直接上图,开始排查
记一次生产CPU飙高排查(超300%)_第1张图片

原因分析:

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

你可能感兴趣的:(linux)