在java 11和Ubuntu 18的spring引导中,我们应该使用哪个java垃圾收集器
我们有10个spring引导应用程序,它们运行在ubuntu18上,具有8GB RAM和Java11 我们正在使用java垃圾收集器-XX:+UseSerialGC运行应用程序,而不限制堆空间 但几天后,服务器内存被完全消耗,服务器被挂起 如果使用垃圾收集器,是否需要限制堆内存在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还可以,但不太好!但会被封锁。至少使用平行的一个。检查差异 也就是说,如果您有真正的内存泄漏,那么另一个垃圾收集器对您没有多
我也尝试过其他垃圾收集器,但除了+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%字节。不知道如何解决这些问题。有什么建议吗?