2017-02-18 45 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

相關問題