2013-08-07 3 views
0

Я провел тест, основанный на примере решения библиотеки activemq-cpp. В тесте я отправляю 50 000 сообщений в очередь, и после того, как все они отправлены, я их уничтожаю, с INDIVIDUAL_ACKNOWLEDGE на сессии и message->acknowledge() на каждое потребленное сообщение. Потребитель является асинхронным.ActiveMQ - память не освобождается после потребления всех сообщений

Память (частный рабочий комплект) java.exe перед отправкой сообщений: 209 320 KB. После отправки всех сообщений: 412,548 КБ. После Потребление все сообщения: 434,637 КБ. Значение, хотя размер очереди равен 0, память не была выпущена. Что мне не хватает? Спасибо.

+0

От http://stackoverflow.com/questions/16649601/java-exe-process-uses-more-memory-and-does-not -free-it-up: 'JVM приобретает память, когда ему нужно выполнить некоторую сложную логику. Когда java завершает обработку задач, JVM все равно сохранит эту память как зарезервированное пространство и не будет возвращена обратно в ОС. Эта архитектура помогает в производительности, поскольку JMV не нуждается в повторном запросе той же памяти из базовой ОС. Он все равно будет находиться в пределах диапазона, который вы определяете в параметре JXM -Xmx. '- то есть, это нормальное явление. – fvu

+0

Это имеет смысл. Благодарю. –

ответ

1

Помимо описанной выше обработки JVM существует целый ряд других факторов, которые здесь играют. В зависимости от состояния брокера при запуске отправителя, отправляющего сообщения, может существовать ряд ресурсов, которые выделяются в брокере для создания очереди и различных других объектов управления, которые затем останутся в памяти для облегчения маршрутизации сообщений и т. Д. проанализируйте использование памяти и проверьте наличие утечек, вы должны использовать такой инструмент, как Yourkit и т. д.

Смежные вопросы