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 循环 。
- Chrome控制台不适用于节点检查器浏览器UI中的variables。 如何启用?
- 在NodeJSdebugging器中添加条件断点
- 无法使节点debugging工作
- debuggingNode.js应用程序时,WebStorm在错误的文件上停止
- 使用WebPack和Feathers进行节点debugging
- 如何在WebStorm 10中通过Gulpfiledebugging由nodemon启动的快速应用程序?
- debuggingNode / Express – require('express')创build一个中断
- 如何在javascript中打印函数签名
- 节点检查器/铬实例显示没有源文件,没有调用堆栈,什么都没有