【日志】今天的一个性能案例

系统升级后出现WAS线程挂起问题,通过分析日志文件和JavaCore,发现会话配置错误导致频繁的会话过期,引起分布式会话管理服务超负荷运转。

环境:Solaris+WAS6.1+oracle9i

事发前,昨晚做了系统升级。

现象:

系统变得很慢,后台报了线程挂起。

分析:

1、WAS中的SystemOut.log日志信息如下

[12-4-10 9:17:33:581 CST] 0000003f ThreadMonitor W   WSVR0605W: 线程“Default : 7”(000000ef)已保持活动状态 763744 毫秒,可能被挂起了。服务器中可能总共挂起了 17 个线程。
[12-4-10 9:17:36:736 CST] 00000038 ServletWrappe I   SRVE0242I: [CMP7_7_0] [/] [/admin/ThreadList.jsp]: 初始化成功。
[12-4-10 9:17:45:281 CST] 00000035 ServletWrappe I   SRVE0242I: [CMP7_7_0] [/] [/portal/PerformanceMonitor.jsp]: 初始化成功。
[12-4-10 9:18:11:290 CST] 00000041 UserCallbacks I   HMGR3101I: 队列 1 的工作队列转储阈值已更改为 20000。阈值 void 的数据为 void。
[12-4-10 9:18:14:894 CST] 00000041 UserCallbacks I   HMGR3101I: 队列 1 的工作队列转储阈值已更改为 10000。阈值 void 的数据为 void。
[12-4-10 9:28:40:014 CST] 00000041 UserCallbacks I   HMGR3101I: 队列 1 的工作队列转储阈值已更改为 20000。阈值 10000 的数据为 {com.ibm.ws.recoverylog.spi.RLSHAGroupCallback=2, com.ibm.ws.hamanager.agent.AgentClassImpl=2, com.ibm.ws.drs.ha.DRSAgentClassEvents=9988, com.ibm.ws.hamanager.agent.AgentImpl=8} Last called back: com.ibm.ws.drs.ha.DRSAgentClassEvents#61939 Max depth: 23575。

2、WAS中的SystemErr.log日志信息如下

[12-4-10 9:16:14:621 CST] 00000168 SystemErr     R  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
[12-4-10 9:16:14:622 CST] 00000168 SystemErr     R  at java.lang.Thread.run(Thread.java:595)
[12-4-10 9:22:16:536 CST] 00000036 SystemErr     R java.util.ConcurrentModificationException
 at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:617)
 at java.util.LinkedList$ListItr.next(LinkedList.java:552)
 at com.ibm._jsp._POP3Chart._jspService(_POP3Chart.java:113)
 at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:87)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1096)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1037)
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:118)
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:566)
 at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
 at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
 at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:226)
 at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
 at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:748)
 at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1466)
 at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:119)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
 at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
 at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
 at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
 at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
 at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
 at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
 at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
 at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
 at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)

3、分析JavaCore

有大量的等待现场,有死锁,但是都是WAS的相关线程

思考:

怎么会这么多的会话得不到请求呢?

打了电话给IBM800,解释是,我们系统是建立在集群上,集群中使用了策略【内存复制到内存】,现在复制过程出了问题

这个让我更郁闷了,这个策略一直应用着,不至于现在出问题呀。

不过,从javacore中,初步判断是会话出了问题,因为大量的等待的会话线程,头天晚上做了升级,怀疑升级代码出问题了,但是升级的代码中,没有涉及到会话的修改啊。

检查与结论:

既然怀疑会话出问题,就先排除会话吧,把WAS有关会话的设置检查了一遍,没有看到异常。

最后检查到,我们代码的会话设置,果然是会话设置出问题了,在web.xml中

 <session-config>
  <session-timeout>30</session-timeout>
 </session-config>

把原来的30分钟会话过期,被改为了3,导致非常频繁的会话过期,从而导致WAS分布式会话管理服务的超负荷运转,线程挂起。

至于为什么会被改成这样,就不在此讨论了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值