Spring Boot 1.5.8中的内存泄漏

Vin*_*t89 2 java spring spring-boot

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

stackTrace":"java.lang.OutOfMemoryError:超出GC开销限制\nWrapped: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\tat org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)\n\tat org.springframework.beans.factory.support. DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\n\t ... 48帧截断\n"}

我还使用堆转储进行应用并使用MAT工具进行分析,这是可疑的泄漏 MAT堆丢弃分析仪输出

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

Kar*_*cki 5

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

看起来你已经注册了1,807,588,080个关闭钩子,放置一个断点registerShutdownHook()并调试正在发生的事情.可能是您正在创建多个新的Spring上下文而不是单个Spring上下文,它们每个都注册一个关闭钩子线程.