2011-06-15 119 views
0

我們正在開發車輛跟蹤系統。像每個VTS一樣,我們將GPS設備安裝到車輛中,並且這些設備將車輛位置詳細信息發送到服務器。我們開發了一個TCP通信器,它可以繼續運行並檢查特定端口是否有任何連接請求。如果有的話,它爲該設備創建一個線程,該線程保存所有的設備位置細節。 TCP通信器按預期運行12到16個小時。但是在12-16小時後,它停止響應。日誌中沒有錯誤或異常。甚至還有pid文件也存在,所以進程沒有被殺死。什麼是可能的問題,我應該如何去調試這個問題?TCP通信器在一段時間後停止工作

在此先感謝

+2

您需要確定設備,網絡連接或應用程序是否已停止工作。我建議你在整個網絡中使用心跳,並定期(即使幾分鐘)記錄你的應用程序,即使它沒有做任何事情說它活着) – 2011-06-15 05:32:56

+0

你可以提供一些關於「沒有響應」的意思嗎?連接到端口是否會出現「連接被拒絕」錯誤,或者連接到端口但沒有響應輸入?你有沒有嘗試使用類似telnet連接到端口來檢查是否有任何東西在聽? – 2011-06-15 05:37:53

+1

也跟蹤內存/ CPU利用率。也許服務器應用程序在完成執行後沒有正確地清理線程。日誌數據越多越好。 – 2011-06-15 05:40:47

回答

0

我相信你不關閉連接,流或類似的東西。你提到PID文件,所以我猜你正在Linux上運行。 Linux每次獲得網絡連接或打開文件或創建進程時都會創建處理程序。處理程序的數量是有限的。不幸的是,我不記得shell的命令,但我記得那個可以顯示所有處理程序的命令存在。

所以,我建議你執行以下操作。我相信你的系統會定期更新細節。讓我們說每一分鐘。因此,請讓系統每秒執行一次(如果您需要,則每秒執行100次)。我相信它會卡住得更快。現在減少這段時間,並看到它會在你提到的16小時後繼續工作。如果這將是我對處理程序的假設是正確的。因此,請嘗試查看您的代碼,並看到每次打開輸入/輸出流時,都會將其正確關閉到,最後是。可能在創建和關閉流後添加日誌記錄。

祝你好運!

相關問題