You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by vl...@apache.org on 2023/05/11 12:09:22 UTC

[jmeter] 02/02: fix: reduce delay for stopping JMeter in non-GUI mode from 60 to 1 second

This is an automated email from the ASF dual-hosted git repository.

vladimirsitnikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git

commit c083b2a4d3423c47cf5435b7053bee5ece88e65c
Author: Vladimir Sitnikov <si...@gmail.com>
AuthorDate: Thu May 11 15:02:22 2023 +0300

    fix: reduce delay for stopping JMeter in non-GUI mode from 60 to 1 second
    
    https://github.com/apache/jmeter/pull/717 introduced cachedThreadPool
    in StandardJMeterEngine, and it had 60 seconds inactivity timeout by default.
    It caused non-GUI tests to wait for the threads to cleanup.
---
 .../java/org/apache/jmeter/engine/StandardJMeterEngine.java | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/core/src/main/java/org/apache/jmeter/engine/StandardJMeterEngine.java b/src/core/src/main/java/org/apache/jmeter/engine/StandardJMeterEngine.java
index 7705e98537..e6eb117492 100644
--- a/src/core/src/main/java/org/apache/jmeter/engine/StandardJMeterEngine.java
+++ b/src/core/src/main/java/org/apache/jmeter/engine/StandardJMeterEngine.java
@@ -30,10 +30,11 @@ import java.util.Properties;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.jmeter.JMeter;
 import org.apache.jmeter.samplers.SampleEvent;
@@ -91,11 +92,19 @@ public class StandardJMeterEngine implements JMeterEngine, Runnable {
     /** Whether to call System.exit(0) unconditionally at end of non-GUI test */
     private static final boolean SYSTEM_EXIT_FORCED = JMeterUtils.getPropDefault("jmeterengine.force.system.exit", false);
 
+    private static final AtomicInteger THREAD_COUNTER = new AtomicInteger(0);
+
     /**
      * Executor service to execute management tasks like "start test", "stop test".
      * The use of {@link ExecutorService} allows propagating the exception from the threads.
+     * Thread keepalive time is set to 1 second, so threads are released early,
+     * so the application can shut down faster.
      */
-    private static final ExecutorService EXECUTOR_SERVICE = Executors.newCachedThreadPool();
+    private static final ExecutorService EXECUTOR_SERVICE =
+            new ThreadPoolExecutor(0, Integer.MAX_VALUE,
+                    1L, TimeUnit.SECONDS,
+                    new java.util.concurrent.SynchronousQueue<>(),
+                    (runnable) -> new Thread(runnable, "StandardJMeterEngine-" + THREAD_COUNTER.incrementAndGet()));
 
     private volatile Future<?> runningTest;