From 9113ae2e7246020033299b79ecc5160c2e193651 Mon Sep 17 00:00:00 2001 From: Sahn Lam Date: Tue, 14 Feb 2017 21:00:40 -0800 Subject: [PATCH] Use ExecutorService.newFixedThreadPool for LeaseRenewer The existing ThreadPoolExecutor was misconfigured and caused the thread pool to recycle idle threads continuously. VisualVM showed that a thread got recycled about every 3 seconds, creating and destroying several hundred threads in about 15 minutes. Use ExecutorService.newFixedThreadPool instead, as recommended by the javadoc for ExecutorService. --- .../services/kinesis/leases/impl/LeaseCoordinator.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java b/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java index 921cfbc4..76cc7e87 100644 --- a/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java +++ b/src/main/java/com/amazonaws/services/kinesis/leases/impl/LeaseCoordinator.java @@ -19,11 +19,9 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; @@ -368,9 +366,6 @@ public class LeaseCoordinator { * @return Executor service that should be used for lease renewal. */ private static ExecutorService getLeaseRenewalExecutorService(int maximumPoolSize) { - ThreadPoolExecutor exec = new ThreadPoolExecutor(maximumPoolSize, maximumPoolSize, - 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(), LEASE_RENEWAL_THREAD_FACTORY); - exec.allowCoreThreadTimeOut(true); - return exec; + return Executors.newFixedThreadPool(maximumPoolSize, LEASE_RENEWAL_THREAD_FACTORY); } }