1.问题描述
CRM调用weblogic92上ejb服务,通过XA全局事务操作多库进行跨库连表查询,系统运行一段时间均表现正常,27号前端业务出现报表不能正常生成,重做无效,只能重启weblogic服务,查看日志发现如下错误:####<[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'><<><><1340765733741>
伴随出现的还有:
####<[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'><<><><1340785807190>
2.分析与解决方案:
上面第一个错误是JAVAJTA报出的全局事务超时错误,不能获得managedServer1上的ServSynDSCRM2资源,这个连接资源正好是下面错误报出的ServSynDSCRM23数据库连接资源,该连接测试失败,导致部分事务不能正常执行完,而导致全局事务超时回滚。问题的关键是找到连接失效的原因。
经过查询上面的错误多与数据库驱动版本过旧相关,更新数据库驱动到和当前数据库匹配的驱动程序,测试发现问题偶尔还会出现。系统正常运行时日志中报出了大量的创建新连接关闭不适用连接的Info信息,由于当前数据库连接池的配置为初始值5、最大99、步增1,每次只创建出一个连接,在并发量大的时候会严重影响系统性能。因为在创建数据库连接的时候连接池处于锁定的状态,里面的连接不能被正常使用,外面线程用完的连接也不能被放回去。由于问题出现时没有及时做线程快照,没有抓取到当时线程在处理什么请求。从管理控制台监控连接池发现该连接池使用的最大值为36,调整初始值为30,步增调整为5,之后的两天时间里没发现问题再出现,但在日志依旧可以看出先后三次创建出新的连接,每次5个,之后空闲又被关闭。
建议继续观察:1)如果再出现上面连接测试失败、JTA超时的错误可以通过开SR到产品部确认问题的根本原因2)如果日志中还发现有大量的创建和关闭数据库连接的信息,则还要继续适当的调大初始值和步增长值。