Spring Boot-内存泄漏-H2数据库-不注销驱动程序

问题描述 投票:0回答:1

由于新信息而完全返工:

  • 最初的问题:当多次重新部署一个简单的Spring Boot应用程序(2.2.6)时,JBoss使用“ OutOfMemoryError:Metaspace”杀死了自己]
  • 使用堆转储,我发现H2驱动程序(1.4.200)保留了引用并导致问题enter image description here
  • [之后我检查了为什么tomcat的行为不像这样,找到

  • The web application [killerApp] registered the JDBC driver [org.h2.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

    所以它只在雄猫中工作,因为它足够聪明,可以注意到并防止内存泄漏。 JBoss没有这样做,并且遇到了麻烦...

[看起来像带有H2的标准Spring Boot应用程序在处理注销H2驱动程序方面有问题,至少是我的收获。

我另外发现了这个:GitHub - Spring Boot - Discussion about unregister managed JDBC drivers

现在我不确定,谁在“故障”?

  1. 是我,因为我需要适当地注销H2驱动程序的注意事项
  2. 我是因为我没有正确配置Spring Boot应用程序
  3. 用于保持内部状态的H2驱动程序?
  4. 用于在Tomcat上进行中继整理的Spring Boot
  5. 最感谢!

由于新信息而完全重做:最初的问题:在多次使用堆转储重新部署一个简单的Spring Boot应用程序(2.2.6)时,JBoss杀死了“ OutOfMemoryError:Metaspace”本身。 [

与MAT和OOM的另一个周末,我现在修复了内存泄漏。
[首先,我现在在ContextListener中手动注销了从Spring Boot启动的JDBC驱动程序(没有真正的线索,为什么我需要它……而Spring Boot不会自动执行,而是)。这解决了第一次内存泄漏。

另一个来自io.github.classgraph。销毁事物作为应用程序关闭挂钩添加,仅在关闭JVM时执行。 ->对于永远运行的应用服务器不是一个好主意。他们修复了它,但是springdoc-openapi-ui / org.webjars:webjars-locator-core仍在使用带有该错误的旧版本。因此,我手动增加了类图版本。这解决了第二次内存泄漏。

问题已解决:)

spring-boot tomcat jboss h2 jboss7.x
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.