Skip to content

Thread Pools

Java's ThreadPoolExecutor exposes several properties that are useful to monitor to assess the health, performance, and configuration of the pool.

Getting Started

To report thread pool metrics, one can attach a ThreadPoolMonitor in the following manner:

import com.netflix.spectator.api.patterns.ThreadPoolMonitor;

ThreadPoolMonitor.attach(registry, myThreadPoolExecutor, "my-thread-pool");

The thread pool's properties will be polled regularly in the background and will report metrics to the provided registry. The third parameter will be added to each metric as an id dimension, if provided. However, if the value is null or an empty string, then a default will be used as the id.

Metrics

threadpool.taskCount

Counter of the total number of tasks that have been scheduled.

Unit: tasks/second

Data Source: ThreadPoolExecutor#getTaskCount()

threadpool.completedTaskCount

Counter of the total number of tasks that have completed.

Unit: tasks/second

Data Source: ThreadPoolExecutor#getCompletedTaskCount()

threadpool.currentThreadsBusy

Gauge showing the current number of threads actively doing work.

Unit: count

Data Source: ThreadPoolExecutor#getActiveCount()

threadpool.maxThreads

Gauge showing the current maximum number of threads configured for the pool.

Unit: count

Data Source: ThreadPoolExecutor#getMaximumPoolSize()

threadpool.poolSize

Gauge showing the current size of the pool.

Unit: count

Data Source: ThreadPoolExecutor#getPoolSize()

threadpool.corePoolSize

Gauge showing the current maximum number of core threads configured for the pool.

Unit: count

Data Source: ThreadPoolExecutor#getCorePoolSize()

threadpool.queueSize

Gauge showing the current number of threads queued for execution.

Unit: count

Data Source: ThreadPoolExecutor#getQueue().size()