我们有一个使用JBoss 4.2.0,EJB,Hibernate的java应用程序。
在我们的某个生产服务器中,定期获取OutOfMemory错误。 我们在jboss和服务器日志文件中看到用户定义的异常。当用户点击特定代码时,我们故意从代码中抛出此用户定义的异常。但是这个客户的用户数量和使用量更多。所以它会抛出400-500个例外。之后我们得到了一个
WARN org.jboss.mq.SpyJMSException: No pong received;
我们已经实现了ExceptionListener,以便在出现故障时重新连接topicConnection。还有一些如下所示的socketexception。
2012-10-12 10:33:57,824 ERROR [org.apache.tomcat.util.net.PoolTcpEndpoint] (http-0.0.0.0-8880-Processor1436) Socket error caused by remote host /125.236.40.205 java.net.SocketException: Connection reset
分析了生成的堆转储。 4.5 GB内存被jmsspyobject异常占用。 我们从jmx控制台获得了线程转储。我们是否需要将复制的线程转储加载到TDA(线程转储分析器)工具?
OOM是否因为用户定义的异常数量如此之多?我们需要减少它吗?或用户定义的异常不是导致OOM错误的原因吗?
请查找附加的线程日志。我是一个非常新的分析jboss线程日志。有人可以帮我这么做吗?
http://www.4shared.com/file/toRiqF1n/perf-info.html
感谢。