【发布时间】:2015-07-07 17:47:14
【问题描述】:
我继承了一个具有合理复杂性的 nodejs 应用程序。它通过各种网络接口与其他 5 个应用程序交互,主要是 HTTP REST API。时不时地我遇到一个抛出错误的问题,虽然它被处理以防止应用程序崩溃,但我不知道错误来自哪里。以下是我从该错误中获得的典型信息量:
- 连接 ECONNREFUSED
- util.js:L746
- net.js:1000
就是这样。这就是整个消息和堆栈跟踪(消息实际上在errno=ECONNREFUSED 和syscall=connect 中重复,没有帮助)。我正在使用 nodejs 0.12.2 并将堆栈跟踪行相应地链接到源。我已经阅读了源代码,但没有得到任何地方。
我还查看了关于 SO 与 ECONNREFUSED 相关的许多问题,但这些问题总是带有代码示例。如果我知道我的应用程序的哪一部分是对网络请求的响应,我可以修复它。
所以我的问题是,我如何检测节点应用程序以找出像这样的失败请求来自哪里?
PS:我也看过the recommendations for debugging nodejs applications,但没有找到任何答案。
【问题讨论】:
-
来自POSIX
connectsystem call reference forECONNREFUSED:“目标地址没有监听连接或拒绝连接请求。”最可能的原因?没有人在您尝试连接的地址/端口上监听连接。如果有有人在听,那么你检查过你的防火墙了吗? -
在查看代码之前,为什么不从 tcpdump(或 Wireshark)和 Fiddler 开始,以确定哪个服务器和服务拒绝连接?使用 tcpdump(或 Wireshark),您可以找出拒绝它的 IP 和端口。使用 Fiddler,如果它是一个偶尔归档的请求,您可以了解哪个失败(通过查看以前的请求)并且您可以通过 SSL 查看请求。这会给你一个初步的想法。
-
@rodolk 谢谢,这是个好主意,但如果问题只发生在我无法运行这些工具的系统上,也可能不切实际。
标签: javascript node.js network-programming