How to monitor the Thread Pool?
using System;
using System.Threading;
class Program
{
static void Main()
{
// Get the maximum number of threads allowed in the pool
ThreadPool.GetMaxThreads(out int maxWorkerThreads, out int maxIoThreads);
// Get the number of threads that are currently free/idle
ThreadPool.GetAvailableThreads(out int availWorkerThreads, out int availIoThreads);
// Calculate how many threads are actively running tasks
int activeWorkerThreads = maxWorkerThreads - availWorkerThreads;
int activeIoThreads = maxIoThreads - availIoThreads;
Console.WriteLine($"--- Thread Pool Status ---");
Console.WriteLine($"Worker Threads: {activeWorkerThreads} active / {maxWorkerThreads} max");
Console.WriteLine($"I/O Threads: {activeIoThreads} active / {maxIoThreads} max");
}
}
How can I manually configure the Thread Pool?
- Don't touch MaxThreads unless you have a highly isolated, specific architecture requirement.
- Only increase MinThreads if you are running a high-scale microservice (e.g., in Kubernetes) that encounters dramatic bursts of traffic, or if diagnostic tools (dotnet-counters) explicitly show your application suffering from Thread Pool Starvation.
- The real fix for thread pool exhaustion is almost always fixing code-level architecture—replacing synchronous blocking calls (.Wait()) with proper async/await primitives.
using System;
using System.Threading;
// Set the minimum "pre-warmed" threads
// Arguments: (workerThreads, ioThreads)
ThreadPool.SetMinThreads(100, 100);
// Set the maximum upper limit of threads allowed
ThreadPool.SetMaxThreads(500, 500);
<PropertyGroup>
<ThreadPoolMinThreads>100</ThreadPoolMinThreads>
<ThreadPoolMaxThreads>500</ThreadPoolMaxThreads>
</PropertyGroup>
How to monitor the Thread Pool?
How can I manually configure the Thread Pool?