【异常日志】:
<2014-12-23
上午09时58分33秒 CST> <Error> <WebLogicServer>
<BEA-000337> <[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的使用,只在关键时刻进行使用,其他时刻能够不使用的就不进行使用。