gpt4 book ai didi

java - Spring Boot 1.5.8 中的内存泄漏

转载 作者:行者123 更新时间:2023-12-01 22:19:19 26 4
gpt4 key购买 nike

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

stackTrace":"java.lang.OutOfMemoryError: GC overhead limit exceeded\nWrapped by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor': Initialization of bean failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded\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 frames truncated\n"}

我还为应用程序获取了堆转储并使用 MAT 工具对其进行了分析,这是可疑的泄漏 MAT Heap Dump Analyzer Output

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

最佳答案

AbbstractApplicationContext$2 是通过 registerShutdownHook() 方法注册的匿名内部类。如果想确认的话可以自己反编译这个类。

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

关于java - Spring Boot 1.5.8 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50620057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com