From d1e9ba68b3cbea3e9294cf4993d005c3c8ea86f2 Mon Sep 17 00:00:00 2001 From: Artur Pedroso Date: Tue, 22 Feb 2022 22:10:50 +0000 Subject: [PATCH] AMQ-8509: Fix TempUsage memory leak If you have an application that creates lots of queues it will eventually fail with OOM because TempUsage is started on Queue#start but never stopped. The `systemUsage.getTempUsage().start()` used on the Queue#start adds elements on a List from TempUsage parent and these elements are never removed. To reproduce this issue you need to leave an application running for a long time creating different queues. The only way to avoid the leak right now is to stop the BrokerService, which isn't a solution. --- .../src/main/java/org/apache/activemq/broker/region/Queue.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java index 9e0160929d..20f8a3a865 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java @@ -1064,6 +1064,9 @@ public class Queue extends BaseDestination implements Task, UsageListener, Index if (systemUsage.getStoreUsage() != null) { systemUsage.getStoreUsage().stop(); } + if (this.systemUsage.getTempUsage() != null) { + this.systemUsage.getTempUsage().stop(); + } if (store != null) { store.stop(); }