2015-11-09 18 views
0

下,我有一个测试/临时设置在那里我是一个t2.small机器上运行与PM2 5点节点的过程(1个核心和1.7 GB RAM)。最近我看到其中一个进程(接收最大流量)挂起。由于该过程不会退出或抛出异常,PM2会认为它是活着的。因此,我的健康检查失败(请求被挂起并且从不返回),并且API处于关闭状态。的Node.js(express.js)处理后的几天挂PM2

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

我能想到的几个黑客重新启动该进程,但我想找到答案的几个问题:

  1. 这是一个内存分配问题?即使进程挂起,5个进程中每个进程都不会占用超过100 MB的空间。免费-m返回一个健康的800-900 MB。我的问题是,如果一个节点进程不能分配内存,它会像Java和其他基于虚拟机的语言抛出OutOfMemory,或者它会挂起?
  2. 回拨的生命周期是什么?即什么时候它是GCed。在我的代码中,有时我不会调用回调堆栈,并直接将响应返回给浏览器。它会导致未使用/垃圾回调,因为我绕过了它们。例如方法A->方法B(cb1) - >方法C(cb2)。方法C只是有一个return语句,并不会调用cb2。它会导致cb1和cb2对象晃来晃去?这是否会导致我的nodejs挂起问题?
  3. 我看到几个脚本来监视挂起的进程,但有没有更好的方式来处理这个(进程重新启动),直到我找到根本原因?
  4. t2.small是罪魁祸首?即有限的内存和CPU。
+0

日志说什么? –

+0

Wha pa pa pa pa pa pa pow!对不起,无法抗拒。 – joshp

+0

在日志中没有任何东西......没有例外......没有......这个过程只是挂着.... – user1468899

回答

0

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

不知道为什么,它冻结,但固定库初始化解决问题的原因。