我正在尝试诊断我的 node.js 应用程序中的错误。问题是,在让 node.js 进程在一夜之间运行之后,我们一直遇到这样一种情况,即节点核心中的 HTTP 解析器最终会吞噬所有 CPU 周期并锁定进程。我知道它是 HTTP 解析器,因为我已经使用 dtrace 对其进行了跟踪。
请考虑以下快速而肮脏的火焰图可视化:
http://37.153.104.73:8081/main.html
此可视化使用此处描述的技术。顶部的滑块可调整进行跟踪的小时数。左边的列是我的应用程序代码所花费的时间,右边的列是 HTTP 解析器所花费的时间。您可以看到,在整个晚上,越来越多的时间花在 HTTP 解析器上,直到凌晨 3:00,实际上所有时间都花在了 HTTP 处理器上。
可能导致这种情况的一件事是我们正在使用 eventsource-node 库,它设置了长寿命的 HTTP 连接。
此问题出现在 Node.js 0.8 和 0.10、32 位 Linux、64 位 Linux 和 SmartOS 上。
我没有任何诊断源自节点核心的问题的经验,因此将不胜感激有关如何开始诊断此问题的任何指导。我在上面链接到的服务器上提供了所有跟踪数据。