Spring 引导元空间内存泄漏
Spring Boot Metaspace Memory Leak
我正在使用 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 网络服务中发生的最常见的内存相关故障之一(遵循超出本机线程的最大数量 问题和超出capacity of the heap issue) is exceeding the capacity of the permgen (where 类 are allocated, transformed into MetaSpace 在 JDK 1.8 ).
超出 PermGen 的容量 Space
原因:
- 安装在 Jetty 上的应用程序动态生成 类 并且 PermGen/Metaspace space 应该增加。
- 一个库或一段应用程序代码正在动态创建无限数量的 类 不符合垃圾回收条件的
示例:
MessagePack 为每个 MessagePack 实例生成模板 类,其中这些实例缓存每个实例的模板。如果应用程序创建了过多的 MessagePack 实例,很可能会生成过多的 类,最终导致内存故障。
诊断:
在 Jetty Web 服务上诊断与内存相关的问题的最有效方法是通过 JMX 连接到它并使用 jconsole 对其进行监控。
默认情况下 JMX 未在 Jetty 上启用,但 Spring Boot provides monitoring and management over JMX out of the box.
我只是猜测,但对于您的应用程序,问题的原因可能是您使用 ehcache 的方式。
我正在使用 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 网络服务中发生的最常见的内存相关故障之一(遵循超出本机线程的最大数量 问题和超出capacity of the heap issue) is exceeding the capacity of the permgen (where 类 are allocated, transformed into MetaSpace 在 JDK 1.8 ).
超出 PermGen 的容量 Space
原因:
- 安装在 Jetty 上的应用程序动态生成 类 并且 PermGen/Metaspace space 应该增加。
- 一个库或一段应用程序代码正在动态创建无限数量的 类 不符合垃圾回收条件的
示例:
MessagePack 为每个 MessagePack 实例生成模板 类,其中这些实例缓存每个实例的模板。如果应用程序创建了过多的 MessagePack 实例,很可能会生成过多的 类,最终导致内存故障。
诊断:
在 Jetty Web 服务上诊断与内存相关的问题的最有效方法是通过 JMX 连接到它并使用 jconsole 对其进行监控。
默认情况下 JMX 未在 Jetty 上启用,但 Spring Boot provides monitoring and management over JMX out of the box.
我只是猜测,但对于您的应用程序,问题的原因可能是您使用 ehcache 的方式。