[英]What should I do when JAVA desktop app hang on?
我的Java桌面應用程序(使用netbean開發)在長時間(約10個小時)運行時仍處於掛起狀態。
我的應用程序的目的是將SOAP Web服務調用到企業系統。 因此,執行總是需要很長時間。
但是在最初的1-4個小時中,效果很好。
運行10個小時以上時,總是會出現此問題。
以下是我已完成的步驟。
使用log4j記錄所有異常消息。 (我認為這可能是由於網絡連接,數據庫連接等引起的。)
每次在循環語句中調用System.gc()(因為我認為它長時間運行。它不會將資源釋放回系統,因此我強制它調用垃圾收集器)。
我已經嘗試並測試了可能發生異常的每種情況,例如
每個異常都將由log4j捕獲並能夠繼續運行。
但這在最初的1-4個小時中效果很好。 當達到10小時。 它掛了。 沒有日志。 沒有訊息
我使用JAVA JDK 1.8,MySQL數據庫5.5.4,Window Server 2008 R2 64位
您能幫我建議我遺漏的點或點嗎?
我還有其他需要檢查的地方嗎?
最好的祝福,
簡單的答案:調試,添加許多日志記錄/調試。
您僅使用log4j來檢查錯誤,但是您的應用程序顯然在log4j有機會記錄日志之前掛在其他地方,所以我建議您執行以下兩項操作之一:
1)創建一個新線程來檢查應用程序的狀態(顯然,您需要將部分代碼暴露給該線程並定期檢查它)。
2)比較容易的選擇是添加大量調試代碼以將所有內容記錄到文件中,然后在應用程序掛起時,通過檢查日志文件來查看上一個操作的確很容易,並且可能確切地知道是什么導致了問題。 因此,就個人而言,而不是僅記錄錯誤,我將在處理以下任何一項之前記錄日志:傳入連接,超時,對數據庫的調用,http錯誤以及幾乎所有其他重大事件,並且在所有以下已處理。 這樣,當您的應用程序掛起時,只需查找尚未完成的任何過程,然后就可以通過添加更多的調試/日志記錄開始調查原因。
解決問題后,請不要忘記細化或刪除所有調試代碼,否則可能會損失一些性能,除非您在不同的線程中進行所有操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.