debugging事件循环中的延迟

我们使用Nodejs,并且非常满意。 我们通过测量“繁忙”是事件循环来监视Node.jsstream程的性能。 基本上,我们有这样的function

var previousTick; setInterval(function() { now = Date.now(); if(previousTick) { // check (now - statsPeriod - previousTick) } previousTick = now; }, 1000); 

最近,随着一些服务器上的负载开始增加,我们开始注意到,有些时候,延迟非常巨大:一些进程的时间长达500秒。 这显然是一个问题。

我们真的不知道这里发生了什么,我们正在寻找答案。 我们尝试使用节点debugging器 ,但是即使我们可以使用node debug -p <pid>正常运行时轻松地连接到进程,但 “延迟” 期间我们无法连接到该进程。

任何想法我们可以使用什么工具或技术? 当然,我们不能一致地生产,尽pipe我们每天都会在生产服务器上看到这种情况。

我想要提前安装strace,并且在一个卡住的进程中,这里是yiels:

clock_gettime(CLOCK_REALTIME,{1407798758,934775226})= 0 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE)= 0 clock_gettime(CLOCK_REALTIME,{1407798758,934941698})= 1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE, 1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE, 1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE, 1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 fu tex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1 futex(0x20a1038,FUTEX_WAKE_PRIVATE,1)= 1

任何想法可能是什么?

[更新]进一步让我们发现,我们的进程卡在与Timer.js 循环 。