2016-02-12 11 views
0

我已經在node.js中編寫了一個服務器應用程序,它使用socket.io和RS232無線設備從某些硬件接收入站錯誤消息。Node.js如何檢查某些代碼是否在服務器應用程序中被阻止

我的服務器在過去的2個月裏一直收到完美的錯誤消息,但在過去的2天中,服務器已被隨機鎖定,並且不會響應任何入站消息,直到終端中按下Ctrl + C。我通常會期望這會關閉服務器,但是當服務器阻塞時,Ctrl + C已經解除了事件循環的阻塞,然後處理了在事件循環被阻塞時似乎排隊的入站消息(這只是一個理論)。

我相信我的理論是正確的,因爲控制檯將掛起一條消息,如waiting for data...,然後按Ctrl + C稍後將批處理15個請求,將數據推送到我的後端。

最初我無法在代碼中發現任何問題,而且由於應用程序運行2個月沒有問題,我感到更加困惑。我的問題在於,是否有任何易於使用的分析工具來查看我的服務器應用程序正在凍結的位置?

+0

您是否優雅地處理'if else'語句或'try catch'塊的錯誤?也許設備在某個時候發送了一個不尋常的響應,並且您的腳本沒有考慮到這種情況,這可能會導致錯誤/阻止。 – Brett84c

+0

@ Brett84c我在我的'socket.on('data',...'方法中使用了一個詳盡的if/else列表,但我沒有使用try/catch,但是當數據進來時,我會記錄這些數據在緩衝區中,當服務器鎖定時,沒有緩衝區被打印,但是按下Ctrl C它會有。 – Alex

+0

嗯,這很奇怪,希望我可以提供更多的幫助,但是我最好在Node中間,並且從不直接與Socket.io(內置於流星)當所有其他都失敗時,console.log所有內容,heh。 – Brett84c

回答

1

也許你可以使用火焰圖http://www.brendangregg.com/flamegraphs.html找到問題。你可以找到更多的信息here

此外,我建議你記憶你的應用程序配置文件,因爲在一段時間後出現的問題是該問題的常見跡象。

+0

有趣的是,我會明天嘗試一下,看看會發生什麼。謝謝 – Alex

相關問題