2015-11-09 17 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都會凍結。

不知道爲什麼,它凍結,但固定庫初始化解決問題的原因。