2017-02-18 43 views
2

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

我的堆叠:

  • 的NodeJS(V 6.9.4)
  • 的MongoDB(3.2)
  • PM2进程管理器
  • AWS EC2实例中T2

每次我运行的应用程序,它变得没有反应,返回到浏览器的错误:

网:: ERR_CONNECTION_RESET

Pm2的不重新启动应用程序,所以我怀疑它有没有关系nodejs,我也分析了应用程序,它没有内存泄漏。 DB日志也看起来没问题。

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

我正在处理来自nodejs应用程序的所有可能的错误,但没有发生日志文件错误,所以我怀疑它必须是其他东西。

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

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

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

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

感谢

+1

你正在泄漏内存以外的东西是我的猜测,也许是文件描述符。尝试使用netstat或lsof来查看是否有比您期望的更多的开放连接或文件。 –

+0

如果您直接使用节点,即不使用pm2,它会起作用吗? – Robbie

+0

@WillisBlackburn这似乎是它! UDP连接未被释放,nodejs达到硬限制。不知道堆栈溢出如何工作,但我可以接受您的评论作为答案吗?目前还没有确认,我需要再花一天时间进行测试,但看起来像!非常感谢!我花了数百小时! – matewilk

回答

1

从注释复制,因为它显然导致了解决方案:

你泄漏内存以外的东西是我的猜想,也许文件描述符。尝试使用netstat或lsof来查看是否有比您期望的更多的开放连接或文件。

+0

谢谢Willis!为了澄清,'lsof'是我所有问题的答案。它向我展示了未发布的UDP会话(由项目的第三方库中的一个),导致在dev env服务器上达到文件描述符限制(其中限制设置为4096--对于Linux机器是标准的)。我的开发计算机(mac)没有限制,生产服务器也没有限制,或者设置为远高于4096的产品。 – matewilk

相关问题