调试事件循环中的延迟

时间:2014-08-11 19:57:22

标签: node.js debugging

我们使用Nodejs并且非常满意。我们通过测量事件循环的“忙碌”来监控Node.js进程的性能。基本上,我们有这样的功能

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

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

我们真的不确定这里发生了什么,我们正在寻找答案。 我们尝试使用node debugger,但即使我们可以在使用node debug -p <pid>正常运行时轻松连接到该流程,我们也无法在“延迟”期间连接到

知道我们可以使用哪种工具或技术?当然,尽管我们在生产服务器上每天都会发生这种情况,但我们不能始终如一地生产。

我想要提前并安装strace ...并且在一个卡住的过程中,这就是它的结果:

  

clock_gettime(CLOCK_REALTIME,{1407798758,934775226})= 0   clock_gettime(CLOCK_REALTIME,{1407798758,934941698})= 0   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 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

知道那可能是什么吗?

[UPDATE] 再进一步让我们找到我们的process is stuck in a loop与Timer.js。

0 个答案:

没有答案