Spring Integration总是消耗更多内存

时间:2017-06-06 15:45:11

标签: java spring spring-boot memory-leaks spring-integration

我们有一个Spring Boot应用程序,带有Spring Integration上下文,消耗ActiveMQ队列。

如果队列中没有消息,它会消耗越来越多的内存,几个小时后我们总会耗尽内存。

似乎没有做任何事情,但消耗的内存(堆)正在以很小的速度不断增加。

我们怎样才能避免这种情况或至少对此进行描述?

2 个答案:

答案 0 :(得分:1)

您确定您的代码没有产生内存泄漏吗? 如果您通过Java VisualVM连接到您的应用程序并看到如下图片:

example of memory leak

100%表示您确实存在内存泄漏,这不是Spring或Java问题;)。

我可以建议您阅读这些有用的文章如何调试此类问题,然后调查您的应用程序:

  1. https://www.toptal.com/java/hunting-memory-leaks-in-java
  2. https://www.dynatrace.com/resources/ebooks/javabook/memory-leaks/
  3. https://dzone.com/articles/memory-leak-andjava-code
  4. https://blogs.sourceallies.com/2011/07/debugging-memory-leaks-with-visualvm/
  5. http://blog.rejeev.com/2009/04/analyzing-memory-leak-in-java.html

答案 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时非常有用。