spring boot + embed tomcat + standalone jar的内存泄露问题

前一阵遇到了一个很坑的内存泄露问题,记录于此:

有个项目采用spring cloud重构后,部署到线上(其中有一个接口,大概每天调用量在1千万次左右),发现zabbix监控里,linux的可用内存一直持续下降,每次重启后,大概能撑1天,就算业务高峰过去了,内存也不见回收,曲线图如下:

发生故障时,用top -m 看java进程占用的内存并不算高,而且spring boot的acurator端点监控,以及jvm的内存监控都在正常值范围内,刚开始怀疑是jvm参数设置不合理,调整了G1垃圾收集器各种参数组合,没有明显效果,然后尝试换回CMS收集器,再折腾了几天,仍然如此。用dump导出来分析,线程数、大对象啥的都不高,遂怀疑是spring cloud的坑。

攀墙出去google了下,无意搜索" spring boot memory leak",发现有些人遇到了类似的问题,共同点都是embed tomcat + standalone jar运行方式,于是怀着试一试的心理,把容器换成了undertow,居然稳定了!

附,更换方法:

    compile('org.springframework.boot:spring-boot-starter-web') {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile('org.springframework.boot:spring-boot-starter-undertow')  

注:其它jar包也有可能隐式依赖了tomcat,保险起见最好加一个全局的排除处理

    configurations {
        all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
    } 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛客网

金山wps服务端二面面经

前言:阿婆主很久很久没写过面经了,之所以写这篇面经是真的感觉wps相关的面经太少啦,既然有机会面试那就写一篇吧 直接上啦---> 协程和线程,比如协程底层的实现...

61360
来自专栏小文博客

SkinMaster(原LOL换肤大师)同步更新——小文’s blog

1.3K60
来自专栏我是攻城师

程序员最恐怖的梦魇是什么?

26840
来自专栏iOS122-移动混合开发研究院

记一个同时支持模糊匹配和静态推导的Atom语法补全插件的开发过程: 序

简介 过去的一周,都睡的很晚,终于做出了Atom上的APICloud语法提示与补全插件:apicloud_autocomplete.个中滋味,感觉还是有必要记录...

20160
来自专栏程序生活

Python爬虫系列(一)初期学习爬虫的拾遗与总结(11.4更)

---- 最近,为了提取裁判文书网的有关信息,自己迈入Python的学习之路,写了快两周的代码,自己写这篇文章总结下踩过的坑,还有遇到一些好的资料和博客等总结下...

41950
来自专栏Golang语言社区

【Go 语言社区】在 Go 语言中,如何正确的使用并发

Glyph Lefkowitz最近写了一篇启蒙文章,其中他详细的说明了一些关于开发高并发软件的挑战,如果你开发软件但是没有阅读这篇问题,那么我建议你阅读一篇。这...

37090
来自专栏图像识别与深度学习

Android学习优秀网站

18440
来自专栏乐沙弥的世界

Python简介

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。

21130
来自专栏Golang语言社区

在 Go 语言中,如何正确的使用并发

Glyph Lefkowitz最近写了一篇启蒙文章,其中他详细的说明了一些关于开发高并发软件的挑战,如果你开发软件但是没有阅读这篇问题,那么我建议你阅读一篇。这...

21100
来自专栏牛客网

2018腾讯、美团C++后台研发实习生面经

31300

扫码关注云+社区

领取腾讯云代金券