【异常日志】:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<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的使用,只在关键时刻进行使用,其他时刻能够不使用的就不进行使用。