Course contentsShow
← C#
Lesson 1777 of 1,90816. Performance and DiagnosticsFree lesson

Tuning Kestrel for High-Throughput HTTP Traffic

Students will optimize server-level configuration parameters for maximum request volume.

In this lesson, you will learn how to fine-tune Kestrel’s low-level configuration settings to squeeze maximum request throughput out of your ASP.NET Core applications.

While Kestrel is highly optimized by default, high-throughput scenarios often hit limits related to connection handling and memory allocation. To reach peak performance, you must shift your focus from business logic to the server transport layer.

Optimizing Transport Configuration

Kestrel relies on Libuv or the managed Sockets transport. For maximum throughput, you should explicitly tune the Limits exposed via the KestrelServerOptions. Specifically, focusing on connection limits and request headers is vital for preventing resource exhaustion under load.

builder.WebHost.ConfigureKestrel(options =>
{
    // Increase the maximum concurrent connections to prevent connection queuing
    options.Limits.MaxConcurrentConnections = 10000;
    
    // Fine-tune request body limits to prevent buffer bloat
    options.Limits.MaxRequestBodySize = 1024 * 1024; // 1MB

    // Optimize header reading to reduce memory pressure per request
    options.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(5);
});

Minimizing Allocation via Response Buffering

A common bottleneck in high-throughput services is the overhead of internal buffering. By default, Kestrel buffers response data before sending it to the socket. If you are serving large volumes of small responses, you can reduce latency and garbage collection pressure by manually controlling the response buffer size or using ResponseCompression judiciously.

Furthermore, ensure you are utilizing PipeReader and PipeWriter if your application performs custom protocol parsing. These structures are built on System.IO.Pipelines, which are designed to minimize the copying of data between your application code and the underlying network stack—a critical requirement for high-concurrency environments where every millisecond of CPU time counts.

The Impact of Threading

When tuning Kestrel, remember that high-throughput is intrinsically linked to ThreadPool health. If your Kestrel limits are set too high but your ThreadPool is starved due to synchronous blocking calls, your throughput will plummet regardless of network tuning. Always ensure your pipeline remains fully asynchronous to allow the IO Completion Ports to do their job without stalling.

Key Takeaway: Tuning Kestrel for high throughput requires balancing connection limits to maximize concurrency while minimizing allocation overhead through efficient buffer management and fully asynchronous I/O pathways.