问题描述
2台服务器1台放ejb(weblogic部署)1台放应用(非web)应用是一个多线程发送邮件的程序现在出现一个问题就是从数据库获取某些运营商如(test.com)数据时会出现下面的错误在ejb服务器上可以看到被此处调用的sql语句返回记录集结果为0而且后台没有任何报错而其它运营商(163.com)调用ejb后可以返回最多200条数据反而没有报这个错我们一共设置取9个运营商每个运营商都是一个线程启动单独取对应数据我们另外还有2台服务器部署和上面2台一样,但对应的数据库中数据比较少,不管什么类型运营商都不会报这个错目前查看数据库各类运营商最多的也就10万条记录最少的几千条记录但我们的取数sql是有条数限制的每次<200条错误如下:这个错误是从放应用服务器的日志中看到的ERROR]2009-03-2714:18:38smtp.thread.GetEmailThread-获取新Mail失败:;nestedexceptionis:weblogic.utils.NestedException-withnestedexception:[java.lang.OutOfMemoryError]weblogic.rjvm.PeerGoneException:;nestedexceptionis:weblogic.utils.NestedException-withnestedexception:[java.lang.OutOfMemoryError]atweblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)atweblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284)atweblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244)atcore.ejb.gwData_6xfme4_EOImpl_815_WLStub.searchMessage(UnknownSource)atsmtp.ejb.EJBClient.getSendMessage(EJBClient.java:143)atsmtp.thread.GetEmailThread.getEmail(GetEmailThread.java:515)atsmtp.thread.GetEmailThread.doGetEmail(GetEmailThread.java:222)atsmtp.thread.GetEmailThread.run(GetEmailThread.java:174)Causedby:weblogic.utils.NestedException-withnestedexception:[java.lang.OutOfMemoryError]atweblogic.rjvm.RJVMImpl.gotExceptionReceiving(RJVMImpl.java:817)atweblogic.rjvm.ConnectionManager.gotExceptionReceiving(ConnectionManager.java:919)atweblogic.rjvm.t3.T3JVMConnection.hasException(T3JVMConnection.java:829)atweblogic.socket.SocketMuxer.deliverExceptionAndCleanup(SocketMuxer.java:565)atweblogic.socket.SocketMuxer.deliverHasException(SocketMuxer.java:521)atweblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:303)atweblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)atweblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)大家帮忙看看会是什么原因?
解决方案
解决方案二:
我们之前在测试环境的机器上做过压力测试程序连续跑每天最多发送36万封邮件没有任何问题程序导致内存泄漏可能性不大关键我们这个问题是在正式环境机器上刚开始运行就抛出来的
解决方案三:
可可能是程序本身的bug如果确定数据量不大的话是不是什么地方出现死循环倒是内存溢出了呢
解决方案四:
生成HeapDump去分析一下看什么东西在里面还有分析GC的过程是否有异常数据库是否返回巨大的ResultSet导致?
解决方案五:
什么操作系统呢?那个虚拟机?
解决方案六:
会不会在生产上空间占用过多