gpt4 book ai didi

java - Spring Boot 元空间内存泄漏

转载 作者:行者123 更新时间:2023-12-01 06:59:14 24 4
gpt4 key购买 nike

我正在使用 Spring Boot 1.2.5 和 Java 1.8.0_51,一旦应用程序启动并运行,元空间就会以大约每小时 10MB 的速度增长。似乎是类加载泄漏之类的,我只是无法弄清楚是什么原因造成的。

应用程序正在使用 Jetty 而不是 Tomcat 运行。

我有一个正在运行的 Reactor 事件循环和几个计划的进程。然而,当我拒绝它们时,这些情况会继续发生。

这些是我正在使用的一些库:

spring-boot-starter-actuator
spring-boot-starter-aop
spring-boot-starter-data-jpa
spring-boot-starter-data-rest
spring-boot-starter-security
reactor-spring-context
hibernate-ehcache

最佳答案

Jetty 网络服务中发生的最常见的内存相关故障之一(遵循超出 native 线程的最大数量问题和超出堆容量问题) 超出 permgen 的容量(在 JDK 1.8 中分配类,转换为 MetaSpace)。

超出PermGen空间的容量

原因:
- 安装在Jetty上的应用动态生成类,PermGen/Metaspace空间应该增加。
- 一个库或一段应用程序代码正在动态创建无限数量的不符合垃圾回收条件的类。

示例:
MessagePack 为 MessagePack 的每个实例生成模板类,其中这些实例缓存每个实例的模板。如果应用程序创建了过多的 MessagePack 实例,很可能会生成过多的类,最终会导致内存故障。

诊断:
在 Jetty Web 服务上诊断与内存相关的问题的最有效方法是通过 JMX 连接到它并使用 jconsole 对其进行监控。 . 默认情况下 JMX 未在 Jetty 上启用,但 Spring Boot provides monitoring and management over JMX out of the box .

我只是猜测,但对于您的应用程序,问题的原因可能是您使用 ehcache 的方式。

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

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