繁体   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