【发布时间】:2012-03-17 10:55:32
【问题描述】:
在一个节点中,我们看到时间总是在漂移,ntp jitter 非常高。 当我们通过主机中的 vmstat 检查中断数时,大约是 40-50 个中断,在这些机器中通常应该在 1000+ 左右。当我们停止 java 进程并检查中断时,它在 1K 左右恢复正常。还有
cat /proc/interrupts ; sleep 2 ; cat /proc/interrupts
在 java 进程运行时显示大约 200 个中断,在进程停止时显示大约 2k。
我认为定时器中断的延迟可以解释
- 机器上的高负载:由于进程在量子之后没有被踢出处理器,更多的进程在运行队列中,因此负载高
- 响应非常慢:嗯,由于时间片后没有定时器中断,我们正在运行的命令可能不会再次被调度
但无法解释
- 低 %cpu 使用率
这里的问题很少:
- 中断发生了什么?
- 定时器中断具有最高优先级 (irq0),不能忽略。那么(如果有的话)用户杠杆过程怎么会导致这种情况呢?
【问题讨论】:
-
这是什么内核版本?很确定 JVM 在 2.6 之前的内核上运行得非常糟糕,因为线程数和调度程序设计的多。您在这里的测试代码可能没有像您想象的那样安排好,这会影响您在两次运行之间看到的中断数。
-
内核版本为 2.6.18.x。我们使用 vmstat 检查了中断的数量(有趣的部分是中断和上下文切换都减少了)。当 java 代码运行时,/proc/interrupts 的计时器中断数量也减少了。