Cing
发布于 2022-04-28 / 193 阅读
0

一次简单的线上高 CPU 占用问题排查

报警群里持续告警CPU占用超过预警值

从 grafana 看到高 cpu 的 pod
进入 pod 使用 arthas 的 dashboard 命令定位到高 cpu 占用的线程,使用 thread id 命令取到线程执行的命令
看到使用了延迟队列 DelayQueue 的 poll 命令,如下

while (!delayQueue.isEmpty()) {
    T val = delayQueue.poll();
    if (val == null) {
        continue;
    }
}

当队列非空但任务未到时间,会非常消耗 cpu,切换命令为 delayQueue.take() 即可解决问题