• 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"
        } 
  • 相关阅读:
    Node基础篇(模块和NPM)
    Node基础篇(概要)
    配置Chrome支持本地(file协议)的AJAX请求
    关于 WP 开发中.xaml 与.xaml.cs 的关系
    Windows Phone 8.1又有什么新花样
    简单聊聊今天微软的变化
    Entity Framework入门系列(1)-扯淡开篇
    一个简单的文件服务器实现方案
    网站优化之页面级缓存方案
    Windows下Memcached安装与配置实例
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/the-memory-leak-problem-of-spring-boot-with-embed-tomcat.html
Copyright © 2020-2023  润新知