我们有一个Spring Boot应用程序,带有Spring Integration上下文,消耗ActiveMQ队列。
如果队列中没有消息,它会消耗越来越多的内存,几个小时后我们总会耗尽内存。
似乎没有做任何事情,但消耗的内存(堆)正在以很小的速度不断增加。
我们怎样才能避免这种情况或至少对此进行描述?
答案 0 :(得分:1)
您确定您的代码没有产生内存泄漏吗? 如果您通过Java VisualVM连接到您的应用程序并看到如下图片:
100%表示您确实存在内存泄漏,这不是Spring或Java问题;)。
我可以建议您阅读这些有用的文章如何调试此类问题,然后调查您的应用程序:
答案 1 :(得分:0)
自从迁移到JDK 8以来,我一直在使用这些JVM选项。也许他们会帮助您解决问题:
-Xms1024m -Xmx1024m -XX:MaxMetaspaceExpansion=0 -XX:+UseConcMarkSweepGC -server -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxDirectMemorySize=256M -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark
看看this blog post。我发现它在为JDK 8调优GC时非常有用。