【原因分析】:
由于服务器内存消耗过多,导致内存不够用,数据库无法分配多余的内存给应用创建连接。
【解决方法】
使用db2 force application all,强制断开所有的应用与数据库连接,清除session。
【原因分析】:
由于服务器内存消耗过多,导致内存不够用,数据库无法分配多余的内存给应用创建连接。
【解决方法】
使用db2 force application all,强制断开所有的应用与数据库连接,清除session。
【异常信息】:
<2014-12-25 下午05时12分25秒 CST> <2014-12-25 下午05时12分25秒 CST> <[14-12-25 17:12:25,972] [ERROR] [ComputeHistory:insertComputeTableA 79] java.sql.SQLException: Connection has already been closed.> <2014-12-25 下午05时12分25秒 CST> <[14-12-25 17:12:25,995] [INFO ] [QuartzManager:pauseJob 141] 成功暂停 'CheckVersionTask' 定时器。> <2014-12-25 下午05时12分25秒 CST> <[14-12-25 17:12:25,996] [ERROR] [ComputeHistory:insertComputeTableA 83] java.sql.SQLException: Connection has already been closed.> <2014-12-25 下午05时12分25秒 CST> <[14-12-25 17:12:25,996] [ERROR] [ComputeHistory:insertComputeTableA 84] 校验通过时,计算历史表存储数据异常!>
【原因分析】:
由于WebLogic内部设置了对于数据源超时非活动连接关闭机制,但是由于我们程序中执行SQL处理了数据量较大,最终导致我们程序执行的时间已经超出WebLogic内设置的数据源超时非活动连接时间,程序中SQL还没有执行完成,WebLogic就强制关闭了程序和数据库之间的连接。
【解决方案】:
1、首先打开所要设置的数据源。
2、然后设置非活动超时连接时间。
注意:要设置关闭非活动连接的总时间,除以4 就是这个参数所有填写值,此参数值单位为秒。
【参考资料】:
http://www.blogjava.net/fjin/archive/2013/10/10/404841.html
http://impradeep.com/forcibly-releasing-inactive-connection-weblogic-jdbc-wrapper-poolconnection_oracle_jdbc_driver_t4cconnectiond72/
【异常日志】:
<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的使用,只在关键时刻进行使用,其他时刻能够不使用的就不进行使用。