先说一下项目背景,这个问题困扰了我很久。
背景:公司一个和京东合作的项目,初期公司比较有钱,花大钱投入,后面公司效益不好,投的钱少了,用户也就少了,大概项目上线后一年多,经常有用户投诉说页面无法访问,并且公司监控系统也监控到服务器响应时间超长,查了后台日志,unable to commit against JDBC connection或者which is more than the configured time (StuckThreadMaxTime) of “600” seconds. Stack trace。
判断:初期判断是京东有几个批量查询的接口导致服务器压力大,线程数不够用,导致后面再次请求的用户无法请求。后与京东商量,批量查询接口去掉,用别的方式实现,但是此问题依旧存在。后面又仔细查看代码,优化代码,优化SQL,但是此问题依旧存在。找了很多公司大牛,结果都不知道该如何解决。
结果:后来一次偶然的机会,与同事在网上发现了一个文章,跟我们的问题类似。经分析,原来是应用服务器和数据库的防火墙切断了连接导致,超过某段时间没有用户访问,应用服务器和数据库的链接会被防火墙切断,这个时候如果有用户请求进来,则无法请求,用户请求的次数越多,积压的量越大,可用的线程数也越来越少,从而造成了上面说的现象,后来与同事商量更改了weblogic JDBC连接池的配置,勾选高级选项里的“保留时测试连接”,并设置测试频率为120s。测试一段时间没有再发现此问题。
参考文章:https://blog.csdn.net/li1325169021/article/details/106570560/