У меня есть приложение Spring Boot, использующее Spring Integration. Приложение выводит сообщения из очереди RabbitMQ, преобразует данные из этого сообщения, агрегирует 50 преобразованных сообщений, помещает эти сообщения в массив и отправляет их в конечную точку RESTful как JSON. Я вижу, что память медленно ползет, пока приложение не сработает.Почему мое приложение Spring-Boot наращивает память с течением времени?
Я запустил профайлер в нашем приложении, и с течением времени появляются экземпляры VariableLinkedBlockingQueue. Приложение, похоже, очищает их после запуска приложения, но через некоторое время приложение просто наращивает эти экземпляры. Я заставил полную сборку мусора через профилировщик моего приложения, и он очистил некоторые экземпляры, но они продолжают расти. Эти экземпляры только повышаются, когда сообщения отправляются в очередь. Предварительная выборка установлена на 50.
Почему я вижу, как эти экземпляры растут и как я могу это исправить?
Было бы очень полезно использовать некоторые простые приложения для загрузки, чтобы играть с нашей стороны. Спасибо –
По моему опыту, это в основном связано с утечкой памяти в самом приложении, а не в базовой структуре. Профилировали ли вы свою память? – luboskrnac
Я упомянул в описании, что я запускал профилировщик в своем приложении. Были случаи, которые продолжали расти с течением времени. Примерами были com.rabbitmq.client.impl.VariableLinkedBlockingQueue. Я не уверен, откуда эти случаи. Изучив его, все, что я могу догадаться, это то, что это экземпляры для входящих сообщений от кролика. По-видимому, поток связан с тем, что связанные блокирующие очереди используются в библиотеке параллелизма Java. Хотя я не совсем уверен. –
Ivan