maximo在WAS上的奇怪的OutOfMemoryError问题

来源:互联网 发布:npc外观算法 编辑:程序博客网 时间:2024/04/27 23:20


星期天加班,下午在修改用户需求的时候突然客户打来电话说发现maximo登录不了了。我登录WAS控制台查看maximo服务,显示的是运行的箭头标志,应该可以登录的,sqlplus连数据库也能连上的。当时也没多想,只以为是系统运行太久了,重启一下服务就行,所以在websphere中将服务停止后再启动。操作中发现停止服务的时提示了服务未启动,但界面上maximo服务还是显示的是运行的箭头标志而非停止的*标志。但我并未对这个引起重视,而是又选择了启动服务操作。maximo服务很快启动好了,登录速度也很快,ok,问题解决了,我又忙其他的了。
     但很快客户又打电话来说服务又等不上去了,这下我有点晕了。自己尝试登录maximo不行,再次登录WAS控制台查看maximo服务,还是显示运行的箭头标志。我又一次重启maximo服务以后,又可以登录maximo。但很快我就发现maximo又使用不了。
查看c$/IBM/WebSphere/AppServer/profiles/Custom01/logs/MAXIMOSERVER/SystemErr.log,提示下面错误:
[07-11-18 13:37:21:688 CST] 0000003b SystemErrR java.lang.OutOfMemoryError
at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java(Compiled Code))
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java(Compiled Code))
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java(Compiled Code))
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java(Compiled Code))
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java(Compiled Code))
at psdi.mbo.MboSet.getNextRecordData(MboSet.java(Compiled Code))
at psdi.mbo.MboSet.fetchMbos(MboSet.java(Compiled Code))
at psdi.mbo.MboSet.getMbo(MboSet.java(Compiled Code))
at psdi.app.workorder.virtual.ChildrenSet.fetchMbosOriginal(ChildrenSet.java(Compiled Code))
at psdi.app.workorder.virtual.ChildrenSet.fetchMbos(ChildrenSet.java(Compiled Code))
at psdi.mbo.FauxMboSet.getMbo(FauxMboSet.java(Compiled Code))
at psdi.mbo.FauxMboSet.count(FauxMboSet.java(Inlined Compiled Code))
at psdi.mbo.FauxMboSet.count(FauxMboSet.java(Compiled Code))
at psdi.webclient.beans.pssolutions.primavera.PVWOAppBean.getDescendant(PVWOAppBean.java(Compiled Code))
at psdi.webclient.beans.pssolutions.primavera.PVWOAppBean.getDescendant(PVWOAppBean.java(Compiled Code))
at psdi.webclient.beans.pssolutions.primavera.PVWOAppBean.getDescendant(PVWOAppBean.java(Compiled Code))
at psdi.webclient.beans.pssolutions.primavera.PVWOAppBean.filterWOForGoupExport(PVWOAppBean.java:2912)
at psdi.webclient.beans.pssolutions.primavera.PVWOAppBean.pvupdate(PVWOAppBean.java:1203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
at psdi.webclient.system.tags.DefaultHandlerTag.doStartTag(DefaultHandlerTag.java(Compiled Code))
at com.ibm._jsp._control._jspx_meth_mro_defaulthandler_0(_control.java:2771)
at com.ibm._jsp._control._jspService(_control.java:2079)
at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java(Compiled Code))
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java(Compiled Code))
at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java(Inlined Compiled Code))
at com.ibm.ws.jsp.webcontainerext.JSPExtensionServletWrapper.handleRequest(JSPExtensionServletWrapper.java(Compiled Code))
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java(Compiled Code))
at psdi.webclient.system.controller.ControlHandler.handleEvent(ControlHandler.java(Compiled Code))
at psdi.webclient.system.controller.RequestHandler.handleEvent(RequestHandler.java:668)
at psdi.webclient.system.controller.RequestHandler.handleRequest(RequestHandler.java:243)
at psdi.webclient.servlet.WebClientServlet.handleRequest(WebClientServlet.java:81)
at psdi.webclient.servlet.WebClientServlet.doPost(WebClientServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:89)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1924)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:98)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:472)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:411)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:101)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1471)
查看maximov.log,什么错误也没报,但发现maximo在短时间里启动了好几次。见鬼了,我上午还好好的,也没做什么修改,就调整了一下界面而已。同时WAS生成n多heapdump和javacore文件(c$/IBM/WebSphere/AppServer/profiles/Custom01)
      我终于感觉到不妙了。我试着将应用服务器重启,问题依旧存在。因为公司其他几个项目也碰到过OutOfMemoryError问题都是通过调整优化中间件或数据库参数处理的或打maximo补丁,所以我也没想过其他方面,先试着从调整优化参数上着手。
      先试着调整WAS 应用程序服务器 > MAXIMOSERVER > 进程定义 > Java 虚拟机  的初始堆大小 为1024,最大堆大小 1024。然后重启WAS。问题依旧。然后又调整了数据库的一些参数,还是一样的问题。
      我终于有点崩溃了,难不成我得向客户提出提升服务器硬件性能?不行,我还得再试试。我将maximo应用程序连接测试数据库,运行一段时间,没有问题。恩,看来还是数据库应用服务器问题。
      然后我又拿测试应用程序连接数据库服务器,果然发生同样的问题。好,总算找到问题所在了。我试着重启了数据库服务,然后用再试,还是有问题,然道是服务器性能的问题?可是客户这边是最近几个月刚换的数据库服务器,性能非常好,而且已经用了这么久,一直也没发生什么问题啊。所以我开始一步一步清除今天修改的东西,终于发现了,原来是我在工单跟踪中,在计划页面的物料列表中加了个可用数量显示,就是显示当前物料的可用数量(INVENTORY.AVBLBALANCE),将这个字段在界面删除就没问题了。
      真晕,竟然会因为在界面上的修改而引起OutOfMemoryError,真不明白,我在测试应用程序中增加这个显示都没问题。