diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/StressTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/StressTest.java
deleted file mode 100644
index ed43c08..0000000
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/StressTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.glassfish.jersey.jdk.connector.internal;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.Response;
-
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.internal.guava.ThreadFactoryBuilder;
-import org.glassfish.jersey.jdk.connector.JdkConnectorProvider;
-import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
-
-public class StressTest extends JerseyTest {
-
-    private static final int PARALLELISM = 50;
-    private static final int ITERATIONS = 1000;
-
-    @Path("/test")
-    public static class TestResource {
-
-        @GET
-        public String test() {
-            return "test";
-        }
-    }
-
-    @Override
-    protected Application configure() {
-        enable(TestProperties.LOG_TRAFFIC);
-        enable(TestProperties.DUMP_ENTITY);
-        return new ResourceConfig(TestResource.class);
-    }
-
-    @Override
-    protected void configureClient(ClientConfig config) {
-        config.connectorProvider(new JdkConnectorProvider());
-    }
-
-    @Test
-    public void randomnessStatus200() throws InterruptedException, ExecutionException {
-        ExecutorService executor = Executors.newFixedThreadPool(PARALLELISM,
-                new ThreadFactoryBuilder().setNameFormat("client-%d").build());
-        for (int i = 0; i < ITERATIONS; i++) {
-            System.out.println("Iteration " + i);
-            List<Future<Response>> responses = new ArrayList<>();
-            for (int j = 0; j < 100; j++) {
-                Future<Response> future = executor.submit(() -> target("/test").request().get());
-                responses.add(future);
-            }
-            for (Future<Response> response : responses) {
-                assertEquals(200, response.get().getStatus());
-            }
-        }
-        executor.shutdown();
-        assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS));
-    }
-}
diff --git a/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java b/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java
index 578d964..308d342 100644
--- a/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java
+++ b/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -52,7 +52,7 @@
 
 public class MonitoringEventListenerTest extends JerseyTest {
 
-    private static final long TIMEOUT = 500;
+    private static final long TIMEOUT = 1000;
     private static final String MBEAN_EXCEPTION =
             "org.glassfish.jersey:type=MonitoringEventListenerTest,subType=Global,exceptions=ExceptionMapper";
 
@@ -116,6 +116,7 @@
         resourceConfig.property(ServerProperties.MONITORING_ENABLED, true);
         resourceConfig.property(ServerProperties.MONITORING_STATISTICS_ENABLED, true);
         resourceConfig.property(ServerProperties.MONITORING_STATISTICS_MBEANS_ENABLED, true);
+        // Scheduler will process 1000 events per second
         resourceConfig.property(ServerProperties.MONITORING_STATISTICS_REFRESH_INTERVAL, 1);
         resourceConfig.setApplicationName("MonitoringEventListenerTest");
         return resourceConfig;
@@ -126,17 +127,18 @@
         final Long ERRORS_BEFORE_FAIL = 10L;
         // Send some requests to process some statistics.
         request(ERRORS_BEFORE_FAIL);
-        // Give some time to the scheduler to collect data.
+        // Give some time to process events
         Thread.sleep(TIMEOUT);
-        // All events were consumed by scheduler
+        // Verify the exceptionMapperEvents is empty, because no event of this type was sent yet
         queueIsEmpty();
-        // Make the scheduler to fail. No more statistics are collected.
+        // Sending one event that will make an internal error in the scheduler.
+        // No new events will be pushed in the queues after this.
         makeFailure();
-        // Sending again requests
+        // Sending again requests. These events will not be processed, so they will not be counted for statistics.
         request(20);
+        // The expectation is that the scheduler is not going to process previous events because there was a failure before.
+        // We give some time before checking that no new errors are registered.
         Thread.sleep(TIMEOUT);
-        // No new events should be accepted because scheduler is not working.
-        queueIsEmpty();
         Long monitoredErrors = mappedErrorsFromJMX(MBEAN_EXCEPTION);
         assertEquals(ERRORS_BEFORE_FAIL, monitoredErrors);
     }
