weblogic “ThreadPool has stuck threads” 异常处理

【异常日志】:

<2014-12-23  上午09时58分33秒 CST>  
<[STUCK] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'
has been busy for "603" seconds  working on the request  "weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@a738be", 
which  is more than the configured time (StuckThreadMaxTime) of "600" seconds.  Stack trace:
oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3447)
weblogic.jdbc.wrapper.Connection.forcedCleanup(Connection.java:151)
weblogic.common.resourcepool.ResourcePoolImpl.timeoutInactiveResources(ResourcePoolImpl.java:1933)
weblogic.common.resourcepool.ResourcePoolImpl.access$600(ResourcePoolImpl.java:40)
weblogic.common.resourcepool.ResourcePoolImpl$ResourcePoolMaintanenceTask.timerExpired(ResourcePoolImpl.java:2411)
weblogic.timers.internal.TimerImpl.run(TimerImpl.java:273)
weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
weblogic.work.ExecuteThread.run(ExecuteThread.java:173) >

【原因分析】:
1、线程执行时间过长,出现阻塞问题,分析日志查看出现的问题的线程类名。
2、sql语句执行时间过长。

【解决方法】:
可以通过以下几种方法解决:

1)修改StuckThreadMaxTime参数,将默认的600s改成1200s,或者其它适合的值。

2)增大线程数,防止线程阻塞问题。

3)优化程序,减少处理时间。

 

对sql语句进行优化处理:

1)对INFO_SIGN,PPMC等字段建立规范表,从数据库中进行查询,尽量减少in的使用

2)对<>等操作符不使用,使用> or <等方式来代替

3)尽量减少排序order by,rownum的使用,只在关键时刻进行使用,其他时刻能够不使用的就不进行使用。

发表评论