Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java 11和Ubuntu 18的spring引导中,我们应该使用哪个java垃圾收集器_Java_Spring Boot_Garbage Collection_Java Memory Leaks - Fatal编程技术网

在java 11和Ubuntu 18的spring引导中,我们应该使用哪个java垃圾收集器

在java 11和Ubuntu 18的spring引导中,我们应该使用哪个java垃圾收集器,java,spring-boot,garbage-collection,java-memory-leaks,Java,Spring Boot,Garbage Collection,Java Memory Leaks,我们有10个spring引导应用程序,它们运行在ubuntu18上,具有8GB RAM和Java11 我们正在使用java垃圾收集器-XX:+UseSerialGC运行应用程序,而不限制堆空间 但几天后,服务器内存被完全消耗,服务器被挂起 如果使用垃圾收集器,是否需要限制堆内存 我也尝试过其他垃圾收集器,但除了+UseSerialGC之外,其他都没用。UseSerialGC还可以,但不太好!但会被封锁。至少使用平行的一个。检查差异 也就是说,如果您有真正的内存泄漏,那么另一个垃圾收集器对您没有多

我们有10个spring引导应用程序,它们运行在ubuntu18上,具有8GB RAM和Java11

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

但几天后,服务器内存被完全消耗,服务器被挂起

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


我也尝试过其他垃圾收集器,但除了+UseSerialGC之外,其他都没用。

UseSerialGC还可以,但不太好!但会被封锁。至少使用平行的一个。检查差异

也就是说,如果您有真正的内存泄漏,那么另一个垃圾收集器对您没有多大帮助。您可能应该分析您的应用程序,以查看GC没有回收哪些对象实例

检查这篇文章中的Spring Boot:

如果正在耗尽堆,则正在耗尽堆。您选择的垃圾收集器对您没有帮助

当堆耗尽时,任何垃圾收集器*都会尝试尽可能多地清除,因此,如果SerialGC不能腾出一些空间,那么其他收集器也不能

您可能有内存泄漏。以堆转储为例,看看什么占用了最多的空间。从低垂的果实开始——那些占据最多空间的果实。也许你有一些收藏,你可以添加到其中,但永远不会从中删除。对于我的项目,Map通常是最常见的罪魁祸首

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


*嗯,

这听起来像是某种内存泄漏。另一个GC不会帮助你。jup,修复了我的回答。使用MAT工具,检查我们应用程序的heapdump:1:158个java.util.zip.ZipFile$Source实例,加载量占59,53528 12.48%字节。2:jdk.internal.loader.ClassLoaders$AppClassLoader@0x702671760加载的org.springframework.aop.aspectj.annotation.实例化ModelawarepointCutAdvisorimpl的4个实例占用51,44688 10.78%字节。3.加载的10734个java.lang.Class实例占用51,45160 10.78%字节。不知道如何解决这些问题。有什么建议吗?