These items help a lot in any application, including desktop, web server, or terminal server. The end of this post has two large compilations of these settings, one for wired (“non-lossy”) networking, one for wireless (“lossy”).
On the vast majority of Linux distributions, one can just add these changes to /etc/sysctl.conf
, and then run sysctl -p
to apply them without reboot. However, recent additions to standards have enabled us to place custom settings in our own configuration files, so that we don’t take /etc/sysctl.conf out of distro control.
On recent Debian and Ubuntu, we may best put them in /etc/sysctl.d/60-custom.conf (or replace the word “custom” to your liking), and then run sysctl --system
to load both /etc/sysctl.conf and everything under /etc/sysctl.d.
On some other recent distros, it’s /etc/sysctl.d/custom.conf (the word “custom” is still arbitrary), and then run systemctl restart systemd-sysctl
.
You can check your results with sysctl -A
.
The first selection is for wired networking performance:
net.ipv4.tcp_window_scaling=1 net.ipv4.tcp_workaround_signed_windows=1 net.ipv4.tcp_sack=1 net.ipv4.tcp_fack=1 net.ipv4.tcp_low_latency=1 net.ipv4.ip_no_pmtu_disc=0 net.ipv4.tcp_mtu_probing=1 net.ipv4.tcp_frto=2 net.ipv4.tcp_frto_response=2 net.ipv4.tcp_congestion_control=illinois
A bit different first group for networking performance, is recommendable for anything involving wireless, i.e., “lossy” networks:
net.ipv4.tcp_window_scaling=1 net.ipv4.tcp_workaround_signed_windows=1 net.ipv4.tcp_sack=1 net.ipv4.tcp_fack=1 net.ipv4.tcp_low_latency=1 net.ipv4.ip_no_pmtu_disc=0 net.ipv4.tcp_mtu_probing=1 net.ipv4.tcp_frto=2 net.ipv4.tcp_frto_response=2 net.ipv4.tcp_congestion_control = hybla net.ipv4.tcp_allowed_congestion_control = hybla cubic
And then some general networking performance items:
net.core.rmem_default = 31457280 net.core.rmem_max = 12582912 net.core.wmem_default = 31457280 net.core.wmem_max = 12582912 net.core.somaxconn = 4096 net.core.netdev_max_backlog = 65536 net.core.optmem_max = 25165824 net.ipv4.tcp_mem = 8388608 8388608 8388608 net.ipv4.udp_mem = 8388608 8388608 8388608 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem_min = 16384 net.ipv4.tcp_wmem = 8192 65536 16777216 net.ipv4.udp_wmem = 8192 65536 16777216 net.ipv4.udp_wmem_min = 16384 net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.route.flush=1
And some for network security enhancement:
net.ipv4.tcp_synack_retries = 2 net.ipv4.ip_local_port_range = 2000 65535 net.ipv4.tcp_rfc1337 = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_keepalive_intvl = 15
And now a few to keep virtual memory usage under good control:
vm.swappiness=20 vm.dirty_ratio = 60 vm.dirty_background_ratio = 2
And one to increase the maximum number of open and watched files, very helpful indeed for servers, file synchronization of all sorts, and many other functions:
fs.file-max = 2097152 fs.inotify.max_user_watches = 524288
The above was compiled from these two excellent articles:
http://www.networkworld.com/article/2227856/opensource-subnet/best-networking-tweaks-for-linux.html
https://easyengine.io/tutorials/linux/sysctl-conf/
and other sources. Here is the whole set for wired (non-lossy) networking:
net.ipv4.tcp_window_scaling=1 net.ipv4.tcp_workaround_signed_windows=1 net.ipv4.tcp_sack=1 net.ipv4.tcp_fack=1 net.ipv4.tcp_low_latency=1 net.ipv4.ip_no_pmtu_disc=0 net.ipv4.tcp_mtu_probing=1 net.ipv4.tcp_frto=2 net.ipv4.tcp_frto_response=2 net.ipv4.tcp_congestion_control=illinois pre. net.core.rmem_default = 31457280 net.core.rmem_max = 12582912 net.core.wmem_default = 31457280 net.core.wmem_max = 12582912 net.core.somaxconn = 4096 net.core.netdev_max_backlog = 65536 net.core.optmem_max = 25165824 net.ipv4.tcp_mem = 8388608 8388608 8388608 net.ipv4.udp_mem = 8388608 8388608 8388608 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem_min = 16384 net.ipv4.tcp_wmem = 8192 65536 16777216 net.ipv4.udp_wmem = 8192 65536 16777216 net.ipv4.udp_wmem_min = 16384 net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.route.flush=1 vm.swappiness=20 vm.dirty_ratio = 60 vm.dirty_background_ratio = 2 fs.file-max = 2097152 fs.inotify.max_user_watches = 524288
and another full set for wireless / lossy networking:
net.ipv4.tcp_window_scaling=1 net.ipv4.tcp_workaround_signed_windows=1 net.ipv4.tcp_sack=1 net.ipv4.tcp_fack=1 net.ipv4.tcp_low_latency=1 net.ipv4.ip_no_pmtu_disc=0 net.ipv4.tcp_mtu_probing=1 net.ipv4.tcp_frto=2 net.ipv4.tcp_frto_response=2 net.ipv4.tcp_congestion_control = hybla net.ipv4.tcp_allowed_congestion_control = hybla cubic pre. net.core.rmem_default = 31457280 net.core.rmem_max = 12582912 net.core.wmem_default = 31457280 net.core.wmem_max = 12582912 net.core.somaxconn = 4096 net.core.netdev_max_backlog = 65536 net.core.optmem_max = 25165824 net.ipv4.tcp_mem = 8388608 8388608 8388608 net.ipv4.udp_mem = 8388608 8388608 8388608 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem_min = 16384 net.ipv4.tcp_wmem = 8192 65536 16777216 net.ipv4.udp_wmem = 8192 65536 16777216 net.ipv4.udp_wmem_min = 16384 net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.route.flush=1 vm.swappiness=20 vm.dirty_ratio = 60 vm.dirty_background_ratio = 2 fs.file-max = 2097152 fs.inotify.max_user_watches = 524288