报警群里持续告警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() 即可解决问题