繁体   English   中英

Spring Boot 1.5.8中的内存泄漏

[英]Memory leak in Spring Boot 1.5.8

我观察到Spring Boot应用程序在生产环境中内存不足,以下是应用程序生成的异常日志。

stackTrace“:” java.lang.OutOfMemoryError:超出了GC开销限制\\ n包装:org.springframework.beans.factory.BeanCreationException:创建名称为“ org.springframework.context.annotation.internalConfigurationAnnotationProcessor”的bean时出错:bean的初始化失败; 嵌套的异常是java.lang.OutOfMemoryError:超出了GC开销限制\\ n \\ tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564)\\ n \\ tat org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)\\ n \\ t org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)\\ n \\ tat org.springframework.beans.factory.support。 DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\\ n \\ t org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\\ n \\ t ... 48帧被截断\\ n“}

我也将堆转储用于应用程序并使用MAT工具对其进行了分析,这是可疑的泄漏 MAT堆转储分析器输出

我们无法弄清楚如何创建多个应用程序上下文。 理想情况下,这应该是一个单例。 这种行为在我们的本地环境中是不可行的。我们还依赖于Consul存储配置的地方。我也不理解为什么AnnotationConfigApplicationContext对象没有被垃圾回收.Spring Boot中可能存在错误。

AbbstractApplicationContext$2是由registerShutdownHook()方法注册的匿名内部类。 如果要确认它,可以自己反编译该类。

看起来您已经注册了1,807,588,080个关闭钩子,将断点放置在registerShutdownHook()然后调试发生了什么。 可能不是创建单个Spring上下文,而是创建多个新的Spring上下文,并且它们各自注册了一个关闭钩子线程。

我们发现弹簧云依赖关系存在问题,我们正在使用这些依赖关系从Consul获取应用程序配置。 它具有默认配置的手表,该手表每1000毫秒不断轮询一次领事服务器,并在发现配置中的任何更改时刷新应用程序上下文。我们通过将属性spring.cloud.consul.config.watch.enabled设置为false来禁用它来解决此内存泄漏问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM