繁体   English   中英

PM2下几天后Node.js(express.js)进程挂起

[英]Node.js (express.js) process hanging after few days under PM2

我有一个测试/暂存设置,其中我在t2.small机器(1个内核和1.7 GB RAM)上使用PM2运行5个节点进程。 最近,我看到其中一个进程(接收到最大流量)挂起。 由于该过程不会退出或引发异常,因此PM2认为它仍然存在。 结果,我的运行状况检查失败(请求被挂起并且永不返回),并且API处于关闭状态。

我正在使用带有快速框架的nodejs。 我没有从我的代码中进行任何远程网络调用,这可能会阻止它。 重新启动可以始终解决此问题。

我可以想到一些重新启动该过程的技巧,但我想找到一些问题的答案:

  1. 这是内存分配问题吗? 即使挂起该进程,这5个进程中的每一个都不占用100 MB以上的内存。 free -m返回正常的800-900 MB。 我的问题是,如果节点进程无法分配内存,它将像Java和其他基于VM的语言一样抛出OutOfMemory还是只是挂起?
  2. 回叫的生命周期是多少? 即何时GC。 在我的代码中,有时我不调用回调堆栈,而是直接将响应返回给浏览器。 因为我绕过了它们,这会导致未使用/垃圾回调。 例如方法A->方法B(cb1)->方法C(cb2)。 方法C仅具有return语句,并且不调用cb2。 会导致cb1和cb2对象悬空吗? 这会导致我的nodejs挂起问题吗?
  3. 我看到了一些脚本来监视挂起的进程,但是在找到根本原因之前,还有更好的方法来处理此问题(进程重新启动)吗?
  4. t2.small是罪魁祸首吗? 即有限的内存和CPU。

问题出在iOS推送通知库之一。 没有正确初始化(缺少属性)。 每当我尝试在代码中调用该lib时,整个JS VM都将冻结。

不知道它冻结的原因,但是修复库初始化解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM