我有一個使用Spring集成的Spring Boot應用程序。該應用程序從RabbitMQ隊列中提取消息,轉換該消息中的數據,聚合50個轉換後的消息,將這些消息放入數組中,並將它們作爲JSON發送到RESTful端點。我看到內存緩慢地爬起來,直到應用程序崩潰。爲什麼我的彈簧引導應用程序會隨着時間的推移建立內存?
我跑了我們的應用程序探查並有建立隨時間推移VariableLinkedBlockingQueue的實例。應用程序似乎在應用程序啓動後將其清理乾淨,但過了一段時間後,應用程序將構建這些實例。我強制通過應用程序上的分析器完成垃圾收集,並清理了一些實例,但它們繼續積累。這些實例只會在消息發送到隊列時上漲。預取設置爲50
爲什麼我看到這種情況下建立,如何解決這一問題?
對於一些簡單的啓動應用程序來說,這對我們來說很有幫助。謝謝 –
從我的經驗來看,它主要是由應用程序本身的內存泄漏引起的,而不是底層框架。你有沒有描述你的記憶? – luboskrnac
我在描述中提到我在應用程序上運行了一個分析器。有些事情隨着時間的推移不斷增加。這些實例是com.rabbitmq.client.impl.VariableLinkedBlockingQueue。我不確定這些情況來自哪裏。經過研究,我可以猜到的是,這些都是爲來自兔子的傳入消息構建的實例。它似乎與線程相關,因爲鏈接的阻塞隊列在Java併發庫中使用。雖然我不確定。 –
Ivan