1

我们有一个使用 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

谢谢。

4

0 回答 0