java没有释放链接会怎样_记一次忘记释放资源导致连接池满了的坑

本文讲述了作者在部署SpringSSM项目到Tomcat时遇到的服务不稳定问题,通过排查日志、端口状态和代码审查,发现由于未正确释放数据库连接导致的资源泄漏。最终通过修复代码并理解容器管理的重要性解决了问题。
摘要由CSDN通过智能技术生成

spring ssm项目 ,部署在tomcat上,最近发现项目过一段时间,访问的接口就没有任何响应。

先ping服务器,没问题。telnet应用端口,发现telnet不上,tomcat主页偶尔可以偶尔不可以。

把tomcat下的日志拷贝下来,观察了从上一次重启到服务宕掉的日志,发现日志中并没有异常,比如说内存溢出,程序异常报错等等

初步认为是因为服务是通过手动开启的,而我以远程登录服务器的方式,导致进程坑能被系统关掉或者停掉.

那我通过类似console口连接的方式连接到服务器上,把服务注册为守护进程,这样子应该可以解决掉了,当时觉得问题解决掉了。

很快的,过了一段时间,出现了同样得问题了,因为当时应用程序并没有任何异常日志,所以暂时没有了思路。

尝试着在这段时间访问tomcat主页,tomcat正常访问。

连接到服务器,查看服务端口的情况,服务端口大部分情况都是close_wait,这让我觉得不太对劲。访问taomcat主页登录到管理界面,应用显示正常运行状态。

打开项目代码,用本机测试本地项目接口的运行情况,测试了一会儿,访问一个最近因为业务改变而做了修改的接口发现,这个接口多次被访问后,所有接口都没有任何响应了。当时没有注意到是这一个接口,开始怀疑数据库连接池配置出现问题,认真查看了数据库连接池配置,配置了连接最大最小连接数,空闲连接数,数据库连接最大空闲等待时间等等,查来查去,还是没发现配置的问题。而在测试的途中发现某个接口好像导致hang住的概率最大,开始查看接口代码。这段代码最近改写了,因为业务改变,当时用了原生获取sqlsessionfactory的connect过来直接使用,代码结束并没有关闭掉。因为是手动获取了连接,所以这个连接并没有被容器管理到,添加释放资源代码,再次打包,终于解决了问题。

这一次真的是自己给自己埋下了一个坑,也是因为容器做了很多管理操作,导致写代码的时候并没有严谨的对待资源释放的问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值