Linux kernel parameter
sysctl can be used to modify kernel parameters at runtime without recompiling the entire kernel.
net.ipv4.tcp_fin_timeout
can help in faster release of network resources.After adjusting the TCP FIN Timeout:
sudo sysctl -w net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time
determines the time interval for TCP keepalive packets
sudo sysctl -w net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_sack
Enable the TCP selective acks option for better throughput:
# sysctl -w net.ipv4.tcp_sack=1
net.ipv4.tcp_timestamps
Disable the TCP timestamps option for better CPU utilization
# sysctl -w net.ipv4.tcp_timestamps=0
net.core.somaxconn
somaxconn is used to set the maximum number of connections that can be queued for a socket. This parameter is used to prevent a flood of connection requests from overwhelming the system. The maximum value for the net.core.somaxconn
parameter depends on the system and kernel version.
The default value for the net.core.somaxconn
Linux kernel parameter is typically 128 and the maximum value is around 65535 on most systems.
Nginx consideration
It is important to set the net.core.somaxconn
parameter to a value that is larger than the backlog
value of NGINX, as the backlog
value is used to determine the maximum number of connections that can be queued for a listening socket of NGINX only. If the net.core.somaxconn
value is smaller than the backlog value, NGINX will not be able to queue all the incoming connections, resulting in connection errors.[1]
Calculate optimal net.core.somaxconn value
For example, if your average queue length from vmstat is 1000 and you have 2 CPU cores,
the optimal value for net.core.somaxconn would be 1000 * 4 / 2 = 2000.
The formula for net.core.somaxconn
optimal value = CPU cores * queue length / 4
vm.vfs_cache_pressure
can optimize how the kernel handles file system caches
sudo sysctl -w vm.vfs_cache_pressure=50
vm.swappiness
controls how aggressively the kernel swaps memory pages. Lower values are generally better for systems with sufficient RAM
sudo sysctl -w vm.swappiness=10