weblogic 调用ejb返回后报out of memory

2台服务器 1台放ejb(weblogic部署) 1台放应用(非web)
应用是一个多线程发送邮件的程序现在出现一个问题就是从数据库获取某些运营商如(test.com)数据时

会出现下面的错误

在ejb服务器上可以看到被此处调用的sql语句 返回记录集结果为0 而且后台没有任何报错

而其它运营商(163.com)调用ejb后可以返回最多200条数据 反而没有报这个错
我们一共设置取9个运营商 每个运营商都是一个线程启动单独取对应数据

我们另外还有2台服务器部署和上面2台一样,但对应的数据库中数据比较少,不管什么类型运营商都不会

报这个错

目前查看数据库 各类运营商最多的也就10万条记录 最少的几千条记录 但我们的取数sql是有条数限制的

每次<200条


错误如下:这个错误是从放应用服务器的日志中看到的
ERROR] 2009-03-27 14:18:38 smtp.thread.GetEmailThread - 获取新Mail失败:; nested exception

is:

        weblogic.utils.NestedException - with nested exception:

[java.lang.OutOfMemoryError]

weblogic.rjvm.PeerGoneException: ; nested exception is:

        weblogic.utils.NestedException - with nested exception:

[java.lang.OutOfMemoryError]

        at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)

        at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284)

        at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244)

        at core.ejb.gwData_6xfme4_EOImpl_815_WLStub.searchMessage(Unknown Source)

        at smtp.ejb.EJBClient.getSendMessage(EJBClient.java:143)

        at smtp.thread.GetEmailThread.getEmail(GetEmailThread.java:515)

        at smtp.thread.GetEmailThread.doGetEmail(GetEmailThread.java:222)

        at smtp.thread.GetEmailThread.run(GetEmailThread.java:174)

Caused by: weblogic.utils.NestedException - with nested exception:

[java.lang.OutOfMemoryError]

        at weblogic.rjvm.RJVMImpl.gotExceptionReceiving(RJVMImpl.java:817)

        at weblogic.rjvm.ConnectionManager.gotExceptionReceiving(ConnectionManager.java:919)

        at weblogic.rjvm.t3.T3JVMConnection.hasException(T3JVMConnection.java:829)

        at weblogic.socket.SocketMuxer.deliverExceptionAndCleanup(SocketMuxer.java:565)

        at weblogic.socket.SocketMuxer.deliverHasException(SocketMuxer.java:521)

        at weblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:303)

        at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

大家帮忙看看 会是什么原因?

可能的2种情况
1. 你的程序需要的内存很大. 但你分配JVM的太小; 这个可以打印GC日志分析;
2. 你的程序(EJB)部分,可能存在内存泄露; 这个可以通过压力测试检验跟踪.