From 84a28d78f27541b3c9790b3d8d9430566954378b 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. (cherry picked from commit d1e9ba68b3cbea3e9294cf4993d005c3c8ea86f2) --- .../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 13e952b9ff..448e84456a 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(); }