簡體   English   中英

JAVA桌面應用程序掛起時該怎么辦?

[英]What should I do when JAVA desktop app hang on?

我的Java桌面應用程序(使用netbean開發)在長時間(約10個小時)運行時仍處於掛起狀態。

我的應用程序的目的是將SOAP Web服務調用到企業系統。 因此,執行總是需要很長時間。

但是在最初的1-4個小時中,效果很好。

運行10個小時以上時,總是會出現此問題。

以下是我已完成的步驟。

  1. 使用log4j記錄所有異常消息。 (我認為這可能是由於網絡連接,數據庫連接等引起的。)

  2. 每次在循環語句中調用System.gc()(因為我認為它長時間運行。它不會將資源釋放回系統,因此我強制它調用垃圾收集器)。

我已經嘗試並測試了可能發生異常的每種情況,例如

  1. 網絡連接斷開。
  2. 連接超時。
  3. 企業發回的郵件為500內部錯誤(以及所有HTTP錯誤)。
  4. SOAP消息的XML格式無效。
  5. 將XML解析為時失敗
  6. 無法建立與數據庫的連接。
  7. 無效的SQL語句。
  8. 數據庫中字段的數據類型無效。

每個異常都將由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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM