Spring Boot 应用程序文件观察器线程可能存在内存泄漏

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

您好,我的 Java 应用程序遇到 OOM 问题。它部署在 Kubernetes 容器中,是一个使用 Spring Boot 微服务架构并处理文件的 API。最初,我没有看到任何导致我怀疑内存泄漏的关键代码故障。因此,我决定使用 VisualVM 来监视应用程序的内存并确定哪些线程消耗最多的资源。我进行了多次测试,并让应用程序运行几个小时,同时执行其他任务(通常每天都会发生 OOM,导致 Kubernetes 重新启动应用程序)。所有这些都让我怀疑文件观察器线程是造成内存泄漏的原因。最初,它在内存中分配很少的字节,但随着时间的推移,它不断增加。此外,当我使用 Eclipse Memory Analyzer 时,该线程被识别为泄漏嫌疑人之一。我附上了 VisualVM 和内存分析器的屏幕截图,以及我正在使用的 Java VM 参数。非常感谢。

可视化虚拟机监控

我读到的波形是正常的 -> 这里

文件观察器线程

字节只会上升

内存泄漏嫌疑人

子项标题

话题详情

参数虚拟机

我用于 JVM 的参数

java spring-boot multithreading threadpool oom
1个回答
0
投票

尝试禁用开发工具。

在您的 pom.xml 中,确保其范围是 provided:

   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>provided</scope>
   </dependency>

...并且 maven 插件在构建 jar 文件时将其排除:

    <plugins>
       <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <configuration>
             <excludeDevtools>true</excludeDevtools>

重建您的应用程序 (

mvn clean install
),然后使用
java -jar target/[your-app].jar
从 jar 文件运行它。

再次运行探查器,您应该注意到文件观察器线程不再存在。

© www.soinside.com 2019 - 2024. All rights reserved.