linux centos对/etc/sysctl.conf文件做网络资源与系统资源优化,增加可用的本地端口,提高并发效率到10W每秒或者更大QPS
编辑文件:
/etc/sysctl.conf
最大共享内存(推荐值:68719476736)
kernel.shmmax = 68719476736
共享内存总大小限制(推荐值:4294967296)
kernel.shmall = 4294967296
共享内存段最大个数(推荐值:4096)
kernel.shmmni = 4096
启用SynCookies(前端节点服务器建议1,源服务器建议0)
net.ipv4.tcp_syncookies = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。实在吃不消不得已才开启。
net.ipv4.tcp_tw_recycle = 1
Tcp TIME_WAIT 端口重用(建议是)
net.ipv4.tcp_tw_reuse = 1
忽略所有ping请求包(建议是,在被ICMP DDOS攻击不会产生上行流量,根据自身情况是否)
net.ipv4.icmp_echo_ignore_all = 1
最大线程个数(由于65535端口限制,这里建议取值50000为佳)
kernel.threads-max = 50000
可分配的文件句柄最大个数(推荐值:1000000)
fs.file-max = 1000000
修改系統默认的 TIMEOUT 时间,默认为60,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_fin_timeout = 10
表示当keepalive启用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为30秒。
net.ipv4.tcp_keepalive_time = 30
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息/var/log/messages。默认为180000,改为5000。
net.ipv4.tcp_max_tw_buckets = 5000
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接(SYN_RECV)的网络连接数。
net.ipv4.tcp_max_syn_backlog = 8192
通过dmesg可以确认是否有该情况发生 dmesg | grep "TCP: drop open request from",可以用命令 netstat -ant|grep SYN_RECV|wc -l 查看具体大小,大多数情况下这个值应该是0或很小,因为半连接状态从第一次握手完成时进入,第三次握手完成后退出,正常的网络环境中这个过程发生很快,如果这个值较大,服务器极有可能受到了SYN Flood攻击。
另外,上述行为受到内核参数tcp_syncookies的影响,若启用syncookie机制,当半连接队列溢出时,并不会直接丢弃SYN包,而是回复带有syncookie的SYC+ACK包,设计的目的是防范SYN Flood造成正常请求服务不可用。
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1025到64511。
net.ipv4.ip_local_port_range = 1025 64511
sock缓冲区大小,默认值124928改成67108864
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
nf_conntrack表最大连接数修改,解决tcp ping丢包问题。nf_conntrack_max决定连接跟踪表的大小,默认值是65535,修改为1048576。
nf_conntrack_buckets决定存储conntrack条目的哈希表大小,默认值是nf_conntrack_max的1/4。
nf_conntrack_tcp_timeout_established决定ESTABLISHED状态连接的超时时间,默认值是5天,可以缩短到1小时,即3600。
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_buckets = 262144
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
修改后,执行sysctl -p 生效