问题分析:业务系统由三个节点的JBOSS集群,由于客户并不知道是具体的那个节点出了问题。只能依次查看三个节点的日志,发现一个节点的日志有问题。
试着登录了一下,果然出错了。在访问其它两个节点,日志正常,可以正常登录。
错误信息:
2011-07-01 09:13:40,046 ERROR [org.apache.catalina.core.ContainerBase] Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
at org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:747)
at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:443)
at org.apache.jsp.common.pub.QueryCodeInputOverview_jsp._jspx_meth_html_005fform_005f0(QueryCodeInputOverview_jsp.java:132)
at org.apache.jsp.common.pub.QueryCodeInputOverview_jsp._jspService(QueryCodeInputOverview_jsp.java:77)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:387)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
集群中的三个节点使用的是一套放在共享存储上的程序,连的同一套库。因此不会是程序和数据库的问题导致。如果程序和数据库有有问题,
其它两个节点也应该不能正常登录。剩下只有JBOSS的问题了,由于整套业务环境中的JBOSS都是我负责搭建和维护的,一直都很正常。如
果有修改应该有邮件通知我的。但我没有接到任何JBOSS调整的通知。
于是找来升级人员:
问:昨晚是否有升级?
答:升级人员说有数据变更,但应用没有升级。只是重启了一下服务。
问:为什么要数据变更要重启服务呢?
答:开发人员说要重启。
找来开发人员问:为什么数据变更要重启服务?
答:在测试中发现,不重启服务。数据变更有时候可能会不生效。为了保险,所以重启服务。
问:问题的原因找到了吗?
答:还没有,比较难找。并且不好重现,客户着急上线。所以就先升级了。
问:既然是这样,可能是缓存的原因导致的。重启服务,清理缓存了吗?
答:不知道。应该清理了吧。
问:升级人员,重启服务时清缓存了吗?
答:没有升级class文件,为什么要清缓存啊。好像是清缓存了,我也忘了。。。
答案可能已经出来了,可能由于程序的问题,导致数据变更不能及时生效。而重启服务后没有清理
缓存,导致了上述的错误。
关闭服务,清理缓存。重启jboss,问题解决。
虽然是程序的问题,在没找到有效解决方法前,临时升级是可以理解的。但我想说的是,今天的问题是可以避免的。项目组规定,在升级后一定要测试一遍,
升级的功能是否成功,尤其是开发环境。但时间一长,大家就麻痹了。如果昨天升级后,能每个节点都登录测试一遍,就不会有今天的问题。还好,很快就
发现问题的原因了。也没给客户造成什么损失。
切记,运维项目中的规范和流程很重要,一定要遵守。