我有一个使用Spring集成的Spring Boot应用程序。该应用程序从RabbitMQ队列中提取消息,转换该消息中的数据,聚合50个转换后的消息,将这些消息放入数组中,并将它们作为JSON发送到RESTful端点。我看到内存缓慢地爬起来,直到应用程序崩溃。为什么我的弹簧引导应用程序会随着时间的推移建立内存?
我跑了我们的应用程序探查并有建立随时间推移VariableLinkedBlockingQueue的实例。应用程序似乎在应用程序启动后将其清理干净,但过了一段时间后,应用程序将构建这些实例。我强制通过应用程序上的分析器完成垃圾收集,并清理了一些实例,但它们继续积累。这些实例只会在消息发送到队列时上涨。预取设置为50
为什么我看到这种情况下建立,如何解决这一问题?
对于一些简单的启动应用程序来说,这对我们来说很有帮助。谢谢 –
从我的经验来看,它主要是由应用程序本身的内存泄漏引起的,而不是底层框架。你有没有描述你的记忆? – luboskrnac
我在描述中提到我在应用程序上运行了一个分析器。有些事情随着时间的推移不断增加。这些实例是com.rabbitmq.client.impl.VariableLinkedBlockingQueue。我不确定这些情况来自哪里。经过研究,我可以猜到的是,这些都是为来自兔子的传入消息构建的实例。它似乎与线程相关,因为链接的阻塞队列在Java并发库中使用。虽然我不确定。 –
Ivan