我们使用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。