Skip to content

Commit 0f0d302

Browse files
committed
Improve the default executor service in HTTPServer
1 parent c5a95d9 commit 0f0d302

File tree

1 file changed

+23
-3
lines changed
  • prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver

1 file changed

+23
-3
lines changed

prometheus-metrics-exporter-httpserver/src/main/java/io/prometheus/metrics/exporter/httpserver/HTTPServer.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.net.InetSocketAddress;
1717
import java.util.concurrent.ExecutorService;
1818
import java.util.concurrent.Executors;
19+
import java.util.concurrent.RejectedExecutionHandler;
20+
import java.util.concurrent.SynchronousQueue;
1921
import java.util.concurrent.ThreadPoolExecutor;
2022
import java.util.concurrent.TimeUnit;
2123

@@ -222,9 +224,14 @@ private ExecutorService makeExecutorService() {
222224
if (executorService != null) {
223225
return executorService;
224226
} else {
225-
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(NamedDaemonThreadFactory.defaultThreadFactory(true));
226-
executor.setKeepAliveTime(2, TimeUnit.MINUTES);
227-
return executor;
227+
return new ThreadPoolExecutor(
228+
1,
229+
10,
230+
120,
231+
TimeUnit.SECONDS,
232+
new SynchronousQueue<>(true),
233+
NamedDaemonThreadFactory.defaultThreadFactory(true),
234+
new BlockingRejectedExecutionHandler());
228235
}
229236
}
230237

@@ -244,4 +251,17 @@ private void assertNull(Object o, String msg) {
244251
}
245252
}
246253
}
254+
255+
private static class BlockingRejectedExecutionHandler implements RejectedExecutionHandler {
256+
257+
@Override
258+
public void rejectedExecution(Runnable runnable, ThreadPoolExecutor threadPoolExecutor) {
259+
if (!threadPoolExecutor.isShutdown()) {
260+
try {
261+
threadPoolExecutor.getQueue().put(runnable);
262+
} catch (InterruptedException ignored) {
263+
}
264+
}
265+
}
266+
}
247267
}

0 commit comments

Comments
 (0)