nodejs核心中的问题:HTTPparsing器正在吃掉所有的周期

我正在尝试诊断我的node.js应用程序中的一个错误。 问题是,在离开node.js过程之后,我们一直遇到这样的情况:节点内核中的HTTPparsing器最终吞噬所有CPU周期并locking进程。 我知道这是HTTPparsing器,因为我用dtrace跟踪了它。

请考虑以下快速和脏的火焰graphics可视化:

http://37.153.104.73:8081/main.html 

这个可视化使用这里描述的技术。 顶部的滑块调整走线的时间。 左边的列是在我的应用程序代码中花费的时间,右边的列是HTTPparsing器花费的时间。 您可以看到,在夜间,HTTPparsing器中花费的时间越来越多,直到凌晨3:00,所有时间都花在HTTP处理器上。

也许有一件事可能是由于我们使用了eventource-node库,它build立了长期的HTTP连接。

Node.js 0.8和0.10,32位Linux,64位Linux和SmartOS上发生此问题。

我没有诊断源自节点核心的问题的任何经验,所以任何关于如何开始诊断的指导都将不胜感激。 所有的跟踪数据都可以在我上面链接的服务器上find。

火焰图的顶部在HTTPparsing器之外的堆栈上显示附加function。 这显示parsing器调用EventEmitter.emit(),它在本地string.js调用match(),然后在inputv8:internal :: Runtime_RegExpExec之前调用本地regexp.js中的RegExpExecNoTests()。

所以,吃什么东西是CPU执行正则expression式作为HTTPparsing器的“数据”事件的结果。 在不断增长的数据缓冲区上调用match()。