单机支持100万连接是可行的,但带宽问题会成为显著的瓶颈。启用压缩的二进制协议会节省部分带宽,但开发难度增加。
和《LWP进程资源耗尽,Resource temporarily unavailable》中提到的ES配置一样,优化都有类似的思路。这份配置,可以节省你几天的时间,请收下!
操作系统优化
更改进程最大文件句柄数
ulimit -n 1048576
修改单个进程可分配的最大文件数
echo 2097152 > /proc/sys/fs/nr_open
修改/etc/security/limits.conf文件
* soft nofile 1048576
* hard nofile 1048576
* soft nproc unlimited
root soft nproc unlimited
记得清理掉/etc/security/limits.d/*下的配置
网络优化
打开/etc/sysctl.conf,添加配置 然后执行,使用sysctl生效
#单个进程可分配的最大文件数
fs.nr_open=2097152
#系统最大文件句柄数
fs.file-max = 1048576
#backlog 设置
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=16384
net.core.netdev_max_backlog=16384
#可用知名端口范围配置
net.ipv4.ip_local_port_range='1000 65535'
#TCP Socket 读写 Buffer 设置
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=16777216
net.ipv4.tcp_rmem='1024 4096 16777216'
net.ipv4.tcp_wmem='1024 4096 16777216'
#TCP 连接追踪设置
net.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
#TIME-WAIT Socket 最大数量、回收与重用设置
net.ipv4.tcp_max_tw_buckets=1048576
# FIN-WAIT-2 Socket 超时设置
net.ipv4.tcp_fin_timeout = 15