# 东方通连接池计数器问题导致阶段性无法登录系统

# 问题现象

客户是信创环境,使用东方通中间件部署的致远OA系统,经常遇到使用一天或几天后,无法登录OA的问题。

查看OA日志,如hibernate.log能看到大量JDBC异常:Numbers of connections reached pool maxsize

通过搜索关键字,了解到这是东方通TongWeb数据库连接池异常。

可以明确:OA系统部署在东方通中间件下,数据库连接采用的是东方通的数据库连接池管理,连接出了异常,需要从东方通侧找原因!

1715588337130.png

注:通过重启东方通中间件和OA实例后,当时不会出现无法登录问题,但使用一段时间后又会出现。

# 分析步骤

登录东方通管理后台,检查数据库连接池情况:从连接池看板可以看到东方通管理的连接数是50多个,而最大连接数是800个。

1715589368689.png

通过东方通看板,粗看连接池似乎没出问题,但OA异常又显示与连接有关,此时可以在东方通所在信创服务器上通过TCP来检查与数据库的连接数:通过netstat命令发现与数据库建立的TCP连接是852个左右。

这个是真实的连接,说明有很多与数据库的连接未释放。

1715589786378.png

下一步为了核对猜测,可以使用jmap命令分析OA中使用了多少连接池实例(jmap命令及MAT分析工具不在本章介绍范围,自行百度)。

1715590328232.png

1715590362224.png

通过搜索,发现DmdbConnection达梦连接对象存在853个:

1715590377392.png

下钻DmdbConnection的引用链,随机抽查10个,均来自tongweb pool,意思是通过东方通的数据库连接池代理了数据库的连接。

1715590405417.png

再搜索“HulkPool”关键字,发现东方通HulkPool$1内部类800个,HulkPool$2内部类52个。

1715590636752.png

分析总结:从东方通可视化页面看到连接池只占用50个左右,而TCP连接实际是800个,再结合jmap东方通HulkPool占用情况猜测:东方通中间件存在未管理的数据库连接问题。需要联系东方通技术分析解决。

# 解决过程

通过东方通技术分析,此问题是东方通自身连接池计数器管理出现问题导致,此问题有客户遇到过,打现成补丁包即可。

1715590941918.png

1715590986021.png

东方通可能存在问题的版本:TongWeb 7.0.4.4 , 遇到此类问题的项目可参考。

1715591051568.png

编撰人:het