我们有 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/