3

我正在使用 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
4

1 回答 1

0

Jetty Web 服务中发生的最常见的与内存相关的故障之一(遵循Exceeding the maximum number of native threads问题和Exceeding the capacity of the heap issue)是超出 permgen 的容量(分配、转换类的地方)进入JDK 1.8 中的MetaSpace)。

超过 PermGen 空间的容量

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

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

诊断:
诊断与 Jetty Web 服务上的内存相关的问题的最有效方法是通过 JMX 连接到它并使用jconsole对其进行监控。默认情况下,Jetty 上没有启用 JMX,但Spring Boot 提供了对 JMX 开箱即用的监控和管理

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

于 2015-08-14T11:45:26.260 回答