记一次tomcat内存大涨到溢出的经历

点击上方蓝字关注我们

前一段时间提交了一个产品版本给测试人员测试,测试结果简直出人意料!

现象是测试一段时间后页面就卡死了,当时根据这个现象下意识的怀疑是卡到数据库这一层,然后查看数据库连接相关的参数,如意料之中的相似,连接数太多了!当把数据库连接数解决后,本以为这个bug解决了,但是...

测试一段时间后页面又卡死了!!!

打开任务管理器,发现tomcat内存超过了1.5G,而且tomcat关不掉!是什么原因导致的呢?左思右想之后,想到了一个可能会导致tomcat内存上涨的点,那就是多线程,然后翻代码找线程池的配置,发现也没什么可疑之处。

心想这也太奇怪了,那就先解决下tomcat关不掉的问题吧,百度...检查代码...几分钟后找到了,在tomcat监听器的销毁方法(contextDestroyed)里没有关闭线程池,这种情况下,由于线程池没法关闭,进而导致tomcat无法关闭的问题。

将代码改为:

好了,tomcat关不掉的问题是解决了。

接下来解决内存溢出的问题(先看日志):查看tomcat的日志发现,页面每一次调用后台接口Spring的配置文件都会初始化一遍,也就是每次请求spring都会重新注入一次bean,而且占用的内存不会被回收!

然后我就想什么情况下会初始化spring的配置文件:tomcat启动的时候;通过关键字new出来的时候,即:

然后就全局搜索代码,果然在过滤器里找到了,每次接口来就会new一个对象,多可怕的代码,在心里一直骂自己当时怎么那么粗心!这次经历我会引以为戒,记下来也是告诉自己以后不要再犯类似的问题,铭记经验教训,才能更好的前行!

我知道你在看

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值