【问题标题】:Node app unresponsive after certain amount of time节点应用程序在一定时间后无响应
【发布时间】:2017-02-20 05:03:30
【问题描述】:

我试图弄清楚为什么我的 nodejs 应用程序在 11 小时 20 分钟后变得无响应。它每次都会发生,无论我是在 amazon-linux 还是 Red Hat 上运行它。

我的堆栈:

  • nodejs (v. 6.9.4)
  • mongodb (3.2)
  • pm2 进程管理器
  • AWS EC2 实例 T2 中等

每次我运行应用程序时,它都会变得无响应,并向浏览器返回错误:

net::ERR_CONNECTION_RESET

Pm2 没有重启应用,所以我怀疑它与nodejs 无关,我也分析了应用,它没有内存泄漏。 Db 日志看起来也不错。

唯一不变的因素是应用程序在运行 11 小时 20 分钟后崩溃

我正在处理来自nodejs 应用程序的所有可能错误,但日志文件中没有出现错误,所以我怀疑它一定是其他原因。

我还检查了var/log/messages/home/centos/messages,但也没有与那里的应用程序崩溃有关。

/var/log/mongodb/mongo.log 也不显示任何具体内容。

解决问题的最佳方法是什么?

任何线索我该如何调试它或可能是什么原因?

谢谢

【问题讨论】:

  • 我猜你泄漏的不是内存,可能是文件描述符。尝试使用 netstat 或 lsof 查看打开的连接或文件是否比您预期的多。
  • 如果你直接使用node,即没有pm2,它是否工作?
  • @WillisBlackburn 好像就是这样! UDP 连接未释放,nodejs 达到硬限制。不确定堆栈溢出是如何工作的,但我可以接受您的评论作为答案吗?还没有确定,我还需要多花一天时间测试,不过好像是这样!非常感谢!我花了几百个小时!
  • 如果您接受,我会添加一个答案。 :-)

标签: node.js linux mongodb amazon-web-services pm2


【解决方案1】:

从评论中复制,因为它显然导致了解决方案:

我猜你泄漏的不是内存,可能是文件描述符。尝试使用 netstat 或 lsof 查看打开的连接或文件是否比您预期的多。

【讨论】:

  • 谢谢威利斯!澄清一下,lsof 是我所有问题的答案。它向我展示了未发布的 UDP 会话(由项目的第 3 方库之一),这导致在开发环境服务器上达到文件描述符限制(其中限制设置为 4096 - linux 机器的标准)。我的开发机器 (mac) 没有限制,生产服务器要么没有限制,要么设置为远高于 4096。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
相关资源
最近更新 更多