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)
This commit is contained in:
Artur Pedroso 2022-02-22 22:10:50 +00:00 committed by Christopher L. Shannon (cshannon)
parent e84025c267
commit 84a28d78f2

View File

@ -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();
}