1 概述
应XX局方邀请,鉴于局方反映,6月20号凌晨,29号晚上Weblogic系统有夯住现象,导致应用无法访问,对局方Weblogic系统进行检查,排查问题,给出建议。
2问题描述
1)应用运行缓慢
据局方相关人员反映,应用系统最近一段时间有运行时,系统无法访问,weblogic控制台无法打开,这个属于weblogic server夯住现象。
3系统环境
操作系统版本
| SunOS 5.9
|
weblogic版本
| weblogic8.1.6.0
|
4详细分析
1)Server夯住
查看相关时间点的日志,有stuck线程:
####<2011-6-29 下午11时29分18秒 CST> <Error> <WebLogicServer> <app1> <AdminServer> <[ACTIVE] ExecuteThread: '277' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel
>> <> <> <1309361358061> <BEA-000337> <[STUCK] ExecuteThread: '289' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "670" seconds working on the re
quest "Http Request: /piccallweb/B2C.jsp", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:474)
com.opensymphony.oscache.base.Cache.getFromCache(Cache.java:278)
com.opensymphony.oscache.base.Cache.getFromCache(Cache.java:199)
com.picc.piccall.pubfun.UtiCacheAdministrator.getFromCache(UtiCacheAdministrator.java:60)
com.picc.piccall.pubfun.CacheTool.getCache(CacheTool.java:46)
com.picc.utiall.blsvr.code.BLPrpDcode.getSysConfigNew(BLPrpDcode.java:766)
jsp_servlet._daa._tbcbpg._tb.__uiprpoendaainput._jspService(__uiprpoendaainput.java:370)
weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:533)
weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:459)
weblogic.servlet.jsp.PageContextImpl.include(PageContextImpl.java:159)
jsp_servlet.__b2c._jspService(__b2c.java:115)
weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3244)
查看相关日志发现留下了thread dump,该dump中描述的所有执行线程都处于stuck状态,如下所示:
"[STUCK] ExecuteThread: '207' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=1 tid=0x00c61110 nid=0x758 in Object.wait() [0x90cfe000..0x90cff9f0]
at java.lang.Object.wait(Native Method)
- waiting on <0xc31b44d0> (a com.opensymphony.oscache.base.EntryUpdateState)
at java.lang.Object.wait(Object.java:474)
at com.opensymphony.oscache.base.Cache.getFromCache(Cache.java:278)
- locked <0xc31b44d0> (a com.opensymphony.oscache.base.EntryUpdateState)
at com.opensymphony.oscache.base.Cache.getFromCache(Cache.java:199)
at com.picc.piccall.pubfun.UtiCacheAdministrator.getFromCache(UtiCacheAdministrator.java:60)
at com.picc.piccall.pubfun.CacheTool.getCache(CacheTool.java:46)
at com.picc.utiall.blsvr.code.BLPrpDcode.getSysConfigNew(BLPrpDcode.java:766)
at jsp_servlet._daa._tbcbpg._tb.__uiprpoendaainput._jspService(__uiprpoendaainput.java:370)
这个是导致server夯住的原因,根据线程状况,该线程锁在资源com.opensymphony.oscache.base.EntryUpdateState上,根据应用开发人员确认,这个是使用的一个开源框架,查看官网,这个是一个已知的问题,这个已知的BUG请参照官网:http://jira.opensymphony.com/browse/CACHE-276。
5总结与建议
1)Server 夯住
就发现的问题是出在三方框架上,建议:
1.将框架升级到最新版本,最新版本解决了许多已知的问题;
2.当出现问题时,记录下服务器内存使用情况,包括物理内存和虚拟内存。