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.
This commit is contained in:
Artur Pedroso 2022-02-22 22:10:50 +00:00 committed by Christopher L. Shannon (cshannon)
parent bed86a078d
commit d1e9ba68b3
1 changed files with 3 additions and 0 deletions

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