java - 我们应该使用 java 11 和 Ubuntu 18 的 Spring Boot 的 Java 垃圾收集器

标签 java spring-boot garbage-collection java-memory-leaks

我们有 10 个 Spring Boot 应用程序,它们在具有 8GB RAM 和 Java 11 的 ubuntu18 上运行。

我们正在使用java垃圾收集器-XX:+UseSerialGC运行应用程序,而不限制堆空间。

但是几天后服务器内存完全耗尽并且服务器挂起。

如果我们使用垃圾收集器,是否需要限制堆内存?

我也尝试过其他垃圾收集器,但除了 +UseSerialGC 之外没有任何效果。

最佳答案

如果你正在耗尽堆,那么你就是在耗尽堆。您选择的垃圾收集器不会对您有帮助。

当您耗尽堆时,任何垃圾收集器*都会尝试尽可能多地进行清理,因此,如果 SerialGC 无法腾出一些空间,那么其他收集器也将无法做到这一点。

您可能存在内存泄漏。进行堆转储并查看消耗最多空间的内容。从容易实现的目标开始——那些占用空间最多的目标。也许您有一些可以添加但从未从中删除的集合。 (对于我的项目,Map 通常是最常见的罪魁祸首)。

如果可能的话,请考虑定期重新启动服务器,以完全清除所有内容。


*好吧,not quite

关于java - 我们应该使用 java 11 和 Ubuntu 18 的 Spring Boot 的 Java 垃圾收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61209949/

相关文章:

java - Tomcat 不卸载 Web 应用程序

java - 如何使用@RequestBody 或@RequestParam 接收 json 对象

java - 为什么键显示为字符串?

java - 为什么大数组 java 很慢

java - 从 Windows 命令行运行时如何请求 JVM 垃圾回收(不是从代码)

java - 两个纬度和经度之间的中点

java - 改变骰子的眼睛

java - 尝试将变量 Int 实现为 System.out.format

spring - HikariCP 在 "mvn spring-boot:run"时启动,但没有可部署的 war 文件

actionscript-3 - 垃圾收集器在每一帧上占用所有 cpu 时间的原因