Back to articles
Technology Insight

Deep Linux Kernel Optimization for VPS Hosting High-Scale WebSocket Applications with Millions of Connections

June 3, 2026

Introduction to High-Scale WebSocket Optimization

In the modern enterprise landscape, real-time communication is no longer a luxury—it is a core business requirement. Applications ranging from financial trading platforms and collaborative SaaS tools to live IoT dashboards rely heavily on WebSockets to deliver bidirectional, low-latency data streaming. However, supporting millions of concurrent WebSocket connections on a Virtual Private Server (VPS) presents a unique set of infrastructure challenges.

Unlike traditional HTTP requests that are short-lived, WebSocket connections remain open indefinitely. This persistence shifts the primary system bottleneck from CPU processing power to memory capacity, network stack efficiency, and operating system resource limits. Out-of-the-box Linux kernel configurations are optimized for general-purpose workloads, meaning they will quickly fail under the weight of massive concurrent connections. To achieve enterprise-grade stability and maximize hardware ROI, infrastructure engineers must perform deep Linux kernel optimization.

1. Overcoming File Descriptor and Process Limits

In Linux, everything is treated as a file, and every established TCP connection requires a file descriptor (FD). By default, standard Linux installations limit the number of open file descriptors per process to 1024, which will cause immediate crashes when handling WebSocket traffic at scale. To scale to millions of connections, these limits must be dramatically increased.

System-Wide and Per-User Limits

First, we must configure the system-wide limits by modifying the /etc/sysctl.conf file. This ensures the operating system itself can handle a high volume of open files:

fs.file-max = 2097152

Next, we must adjust the per-user and per-process limits in /etc/security/limits.conf. For an application running under a dedicated service user (e.g., websocket_user), apply the following configurations:

  • websocket_user soft nofile 1048576
  • websocket_user hard nofile 1048576

Note: Setting both the soft and hard limits explicitly prevents applications from failing unexpectedly due to restrictive resource enforcement during peak traffic surges.

2. Tuning Connection Tracking (Conntrack)

If your VPS uses a firewall like iptables, UFW, or firewalld, the Linux kernel relies on the nf_conntrack module to track the state of every network connection. For a system managing millions of WebSockets, an unoptimized connection tracking table will overflow rapidly, resulting in dropped packets and severe latency.

Optimizing Conntrack Tables

To prevent kernel panics and packet loss, we must expand the conntrack table size and optimize the hash table buckets by adding the following parameters to /etc/sysctl.conf:

net.netfilter.nf_conntrack_max = 2097152
net.netfilter.nf_conntrack_buckets = 524288

Reducing Timeout Values

By default, the Linux kernel retains connection tracking data for established connections and closed states for an extended period. For WebSockets, reducing these timeouts prevents dead connections from consuming vital kernel memory:

  • net.netfilter.nf_conntrack_tcp_timeout_established = 86400 (Reduces established tracking to 24 hours if idle)
  • net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 30
  • net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30

3. Advanced TCP IP Stack Optimization

The core of WebSocket optimization lies within the TCP/IP network stack. Because WebSockets maintain persistent TCP connections, the kernel's mechanisms for handling handshakes, buffer queues, and connection termination must be finely tuned to handle high concurrency.

Managing the Connection Backlog

When millions of users attempt to connect simultaneously, the kernel's inbound connection queues can become a bottleneck. We must increase the backlog limits to prevent connection timeouts during traffic spikes:

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

Optimizing Port Range and Reassignment

To prevent ephemeral port exhaustion on a VPS acting as a proxy or client gateway, expand the available local port range and enable aggressive port reuse mechanisms:

net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1

4. Strategic Memory Management and Buffer Tuning

Each WebSocket connection allocates a specific amount of read and write memory buffer. If these buffers are configured too high, the system will run out of RAM and trigger the Out-Of-Memory (OOM) Killer long before reaching a million connections. Conversely, if they are too low, network performance drops precipitously.

Configuring TCP Dynamic Buffer Allocation

The optimal strategy is to allow the Linux kernel to dynamically scale buffer memory based on current load, defining efficient minimum, default, and maximum values (measured in bytes):

net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

Additionally, adjust the overall TCP memory limits (defined in pages, typically 4KB per page) to ensure the system allocates sufficient overhead for the network stack:

net.ipv4.tcp_mem = 786432 1048576 2097152

5. Mitigating Latency with Network Interrupt Handling

At high connection volumes, handling network interrupts on a single CPU core can create a severe processing bottleneck. To maintain low latency, network traffic processing must be distributed evenly across all available CPU cores on your VPS.

Implementing RSS and RPS

Ensure that Receive Side Scaling (RSS) or Receive Packet Steering (RPS) is enabled on your network interface card (NIC). This delegates the processing of network packets across multiple CPU cores, preventing any single core from reaching 100% utilization while others sit idle.

Conclusion: Validation and Monitoring

Optimizing the Linux kernel for millions of WebSocket connections is a multi-layered process that transforms a standard VPS into a highly resilient, enterprise-grade machine. By increasing file descriptor limits, stabilizing connection tracking, tuning the TCP stack, and managing memory buffers carefully, businesses can ensure their real-time applications remain performant under intense load.

After applying these sysctl configurations, always execute sudo sysctl -p to commit the changes. Finally, continuous infrastructure monitoring using tools like Prometheus, Grafana, and ss -s analytics is critical to verifying that your optimized kernel behaves exactly as intended under production stress.

Deep Linux Kernel Optimization for VPS Hosting High-Scale WebSocket Applications with Millions of Connections | DPTCloud