【问题标题】:Node.js service chokes and dies once a dayNode.js 服务每天阻塞和死亡一次
【发布时间】:2011-09-29 10:30:26
【问题描述】:

这周的每一天我都从重启我们的节点服务开始我的工作日。 并且每次它只是简单地退出并显示以下消息:

node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: ETIMEDOUT, Connection timed out
at Socket._readImpl (net.js:163:14)
at Socket._onReadable (net.js:633:22)
at IOWatcher.onReadable [as callback] (net.js:177:10)

我无法准确辨别我的代码的哪一部分是导致该错误的原因,以及为什么该错误如此严重以至于导致节点退出。

无论如何,我已经进行了一些搜索,并认为这可能只是一个未捕获的错误事件。 我已经为每个服务器实例添加了一些 on('error') 侦听器,并带有一些自定义日志消息,以确保它被捕获,但无济于事,我今天仍然需要处理常规错误消息。 (真的有必须捕获的“错误”事件吗?)

一个简单的连接超时不应该真的让整个服务崩溃。

该服务的主要目的是保持与许多正在连接的客户端的开放 tcp 连接并能够推出 命令(它很像嵌入式产品的私有僵尸网络)。所以实际上 95% 的时间我们只是在闲置我们的 tcp 套接字并发送保持活动的数据包。 因此要求客户端可以随时断开连接而不会中断 其他连接客户端的服务。

我们正在使用最新的稳定分支节点 v0.4.13-pre 并在 ubuntu 服务器上运行。

【问题讨论】:

  • 是的,我遇到了类似的崩溃,但没有合理的解释。我正在运行节点 0.5.8

标签: node.js tcp timeout


【解决方案1】:

您是否有与该对象的“错误”事件关联的回调函数?

http://nodejs.org/docs/v0.4.12/api/net.html#event_error_

对于所有对象,请确保为它们各自的“错误”事件提供适当的回调,以便它们可以正常退出而不是使程序崩溃。

【讨论】:

  • 谢谢,我开始怀疑是这样的,但无法确定,因为我无法复制错误。
  • 如果我的回答有助于解决您的问题,请随时将我的回答标记为最佳答案,以便我获得积分 :-)
  • 我确实有这些错误捕获器,但我仍然遇到随机崩溃。而且它是完全随机的,使用相同的代码只是不时崩溃。我不确定你的回答是否完全回答了他的问题
  • 它在他的错误消息中说它超时。因此,如果您尝试从超时的套接字读取,错误或崩溃似乎是有效的。首先检查您的阅读情况
【解决方案2】:

在您的代码中添加类似这样的内容:

process.on('uncaughtException', function (err) {
  console.log('Caught Uncaught exception: ' + err);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多