我将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
答案 0 :(得分:0)
Jetty Web服务中最常见的与内存相关的故障之一(遵循超过最大本机线程数问题和超出堆问题的容量)超出permgen的容量(在JDK 1.8中,类被分配,转换为 MetaSpace )。
超出PermGen空间容量
<强>原因强>:
- Jetty上安装的应用程序动态生成类,并且应增加 PermGen / Metaspace 空间。
- 库或一段应用程序代码动态创建无限数量的类,不符合垃圾回收条件。
示例:强>
MessagePack为MessagePack的每个实例生成模板类,其中这些实例为每个实例缓存模板。如果应用程序创建了太多的MessagePack实例,则可能会生成太多的类,这最终会导致内存故障。
<强>诊断强>
诊断与Jetty Web服务上的内存相关的问题的最有效方法是通过JMX连接到它并使用jconsole监视它。
默认情况下,Jetty上没有启用JMX,Spring Boot provides monitoring and management over JMX out of the box。
我只猜测,但就您的应用而言,问题的原因可能就是您使用ehcache的方式。