MongoClient causes memory on undeploy in Tomcat servlet container

We use the current MongoDB Sync driver to establish database connections to a MongoDB in a web application. The web application is hosted in a Tomcat servlet container.

These are our system specs:

  • Apache Tomcat 10

  • JDK 17.0.6

  • mongodb-driver-sync 4.8.2

When we undeploy an application, we get the following error message in catalina.out.

26-Jan-2023 09:02:43.395 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [BufferPoolPruner-1-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
 java.base@17.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.396 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [cluster-ClusterId{value='XXX', description='null'}-mycluster-shard-00-00-server.mongodb.net:27017] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/sun.nio.ch.Net.poll(Native Method)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:181)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:285)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
 java.base@17.0.6/java.net.Socket$SocketInputStream.read(Socket.java:966)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:484)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:478)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
 java.base@17.0.6/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1465)
 java.base@17.0.6/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1069)
 com.mongodb.internal.connection.SocketStream.read(SocketStream.java:113)
 com.mongodb.internal.connection.SocketStream.read(SocketStream.java:138)
 com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:716)
 com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:574)
 com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:413)
 com.mongodb.internal.connection.InternalStreamConnection.receive(InternalStreamConnection.java:372)
 com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:226)
 com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:158)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.397 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [cluster-rtt-ClusterId{value='XXX', description='null'}-mycluster-shard-00-00-server.mongodb.net:27017] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/java.lang.Thread.sleep(Native Method)
 com.mongodb.internal.connection.DefaultServerMonitor.waitForNext(DefaultServerMonitor.java:448)
 com.mongodb.internal.connection.DefaultServerMonitor.access$1500(DefaultServerMonitor.java:65)
 com.mongodb.internal.connection.DefaultServerMonitor$RoundTripTimeRunnable.run(DefaultServerMonitor.java:420)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.398 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [cluster-ClusterId{value='XXX', description='null'}-mycluster-shard-00-01-server.mongodb.net:27017] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/sun.nio.ch.Net.poll(Native Method)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:181)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:285)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
 java.base@17.0.6/java.net.Socket$SocketInputStream.read(Socket.java:966)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:484)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:478)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
 java.base@17.0.6/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1465)
 java.base@17.0.6/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1069)
 com.mongodb.internal.connection.SocketStream.read(SocketStream.java:113)
 com.mongodb.internal.connection.SocketStream.read(SocketStream.java:138)
 com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:716)
 com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:574)
 com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:413)
 com.mongodb.internal.connection.InternalStreamConnection.receive(InternalStreamConnection.java:372)
 com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:226)
 com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:158)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.398 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [cluster-rtt-ClusterId{value='XXX', description='null'}-mycluster-shard-00-01-server.mongodb.net:27017] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/java.lang.Thread.sleep(Native Method)
 com.mongodb.internal.connection.DefaultServerMonitor.waitForNext(DefaultServerMonitor.java:448)
 com.mongodb.internal.connection.DefaultServerMonitor.access$1500(DefaultServerMonitor.java:65)
 com.mongodb.internal.connection.DefaultServerMonitor$RoundTripTimeRunnable.run(DefaultServerMonitor.java:420)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.399 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [cluster-ClusterId{value='XXX', description='null'}-mycluster-shard-00-02-server.mongodb.net:27017] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/sun.nio.ch.Net.poll(Native Method)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:181)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:285)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
 java.base@17.0.6/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
 java.base@17.0.6/java.net.Socket$SocketInputStream.read(Socket.java:966)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:484)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:478)
 java.base@17.0.6/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
 java.base@17.0.6/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1465)
 java.base@17.0.6/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1069)
 com.mongodb.internal.connection.SocketStream.read(SocketStream.java:113)
 com.mongodb.internal.connection.SocketStream.read(SocketStream.java:138)
 com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:716)
 com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:574)
 com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:413)
 com.mongodb.internal.connection.InternalStreamConnection.receive(InternalStreamConnection.java:372)
 com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:226)
 com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:158)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.399 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [cluster-rtt-ClusterId{value='XXX', description='null'}-mycluster-shard-00-02-server.mongodb.net:27017] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/java.lang.Thread.sleep(Native Method)
 com.mongodb.internal.connection.DefaultServerMonitor.waitForNext(DefaultServerMonitor.java:448)
 com.mongodb.internal.connection.DefaultServerMonitor.access$1500(DefaultServerMonitor.java:65)
 com.mongodb.internal.connection.DefaultServerMonitor$RoundTripTimeRunnable.run(DefaultServerMonitor.java:420)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.400 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [MaintenanceTimer-3-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
 java.base@17.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.400 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [MaintenanceTimer-4-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
 java.base@17.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.401 WARNING [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [myapp] appears to have started a thread named [MaintenanceTimer-6-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.6/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
 java.base@17.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
 java.base@17.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
26-Jan-2023 09:02:43.415 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@70f635bf]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.416 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@1050149f]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.417 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@2cbc7be9]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.418 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@132a7a4d]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.419 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@5c8628f2]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.419 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@8813712]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.420 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@94726ef]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.421 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@317a5145]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.422 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@fb62641]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Jan-2023 09:02:43.422 SEVERE [http-nio-8080-exec-88] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [myapp] created a ThreadLocal with key of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference$1@39f1c29b]) and a value of type [com.oracle.truffle.api.nodes.EncapsulatingNodeReference] (value [com.oracle.truffle.api.nodes.EncapsulatingNodeReference@171eac92]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.

The MongoDB connection is created in a ServletContextListener. In the contextDestroy method, the connection is also closed again.

@Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        logger.debug("Closing Connection to Mongo DB.");
        MongoClient mongoClient = (MongoClient) servletContextEvent.getServletContext().getAttribute(EnvironmentConstant.MONGO_CLIENT);
        mongoClient.close();
        logger.debug("Closing Connection to Mongo DB successful.");
    }

However, that doesn’t seem to work for some reason. The method itself is called, but the connections are not closed.

I’ve noticed the same thing, did you ever figure it out?

Unfortunately, no. Maybe a MongoDB developer can give some feedback on this?