我的java桌面应用程序(使用netbean开发)在运行很长时间(大约10个小时)时会挂起。
我的应用程序的目的是将SOAP Web服务调用到企业系统。 因此,执行总是需要很长时间。
但是在最初的1到4个小时里它运作良好。
运行超过10小时后,这个问题总会出现。
我在下面有一些步骤。
使用log4j记录所有异常消息。 (我认为这可能是由网络连接,数据库连接等引起的。)
每次在循环语句中调用System.gc()(AS我认为它运行很长时间。它不会将资源释放回系统,因此我强制它调用垃圾收集器)。 / p>
我已经尝试过在每种情况下都可能发生异常,例如
log4j将捕获每个异常并能够继续运行。
但是在最初的1到4个小时内,这种方法运作良好。当它达到10小时。它被绞死了。没有日志。没有消息。
我使用JAVA JDK 1.8,MySQL数据库5.5.4,Window server 2008 R2 64bits
请你帮我说明我遗失的地点或观点?
我应该关注并检查其他任何事情吗?
最诚挚的问候,
答案 0 :(得分:0)
简单的答案:DEBUG,添加大量日志记录/调试。
您仅使用log4j来检查错误,但是在log4j有机会创建日志之前,您的应用程序显然已挂在别处,所以我建议您执行以下两项操作之一:
1)创建一个检查应用程序状态的新线程(显然需要将部分代码暴露给该线程并定期检查)。
2)更简单的选择是添加大量调试代码来记录所有文件,然后当你的应用程序挂起时,通过检查日志文件很容易看出最后一个动作是什么,并且可能确切地知道什么是引起了这个问题。所以个人而不是只记录错误我会在处理以下任何一个之前做一个日志:传入连接,超时,调用数据库,http错误,以及几乎任何其他重大事件,我也会在所有的后面做一个日志以下已处理。这样,当您的应用程序挂起时,只查找尚未完成的任何进程,然后您可以通过添加更多调试/日志记录来开始调查发生这种情况的原因。
一旦解决问题,不要忘记改进或删除所有调试代码,否则你可能会遇到一些性能损失,除非你在不同的线程中完成所有这些。