优化内核TCP选项

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.ip_local_port_range = 1024 65534

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_syncookies = 1 

net.core.somaxconn = 262144

net.core.netdev_max_backlog = 262144

net.ipv4.tcp_max_orphans = 262144

net.ipv4.tcp_max_syn_bcaklog = 262144

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries =  1

net.ipv4.tcp_syn_reries = 1

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keepalive_time = 30


内核优化详解


net.ipv4.tcp_max_tw_buckets

默认值:180000  设置timewait的值


net.ipv4.ip_local_port_range

默认值:32768-61000  设置允许系统打开的端口范围


net.ipv4.tcp_tw_recycle

默认值:0  该参数用于设置是否启用timewait快速回收


net.ipv4.tcp_tw_reuse

默认值:0  该参数用于设置是否开启重新使用,即允许将TIME-WAIT sockets重新用于新的TCP连接


net.ipv4.tcp_syncookies

默认值:0  该参数用于设置是否开启SYN cookies,如果启用该功能,那么当出现SYN等待队列溢出时,则使用cookies来处理


net.core.somaxconn

默认值:32768  Web应用中listen函数的backlog默认会将内核参数的net.core.somaxconn限制到128,而NGINX定义的NGX_LISTEN_BACKLOG默认值为511,所以有必要调整这个值


net.core.netdev_max_backlog

默认值:300 该参数用于设置被输送到队列数据包的最大数目,在网卡接收数据包的速率比内核处理数据包的速率比内核处理数据包的速度快时,那么会出现排队现象,这个参数就是用于设置该队列的大小


net.ipv4.tcp_max_orphans      

默认值:32768  该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数

字,没有与用户文件句柄关联的TCP套件字将立即被复位,同时给出警告信息,这个限制只是为了防止简单的DOS***,一般在系统内存比较充足的情况下可以增大这个参数 的赋值。


net.ipv4.tcp_max_syn_bcaklog

    默认值:1024   该参数用于记录尚未收到客户端确认信息的连接请求的最大值,对于拥有128M的内存的系统而言,此参数的默认值为1024,,一般在系统内存比较充足的情况下,可以增大这个参数的赋值。


net.ipv4.tcp_timestamps     

默认值:1 该参数用于设置时间戳,这可以避免序列号被重复使用,在高速、高并发的环境中这种情况是存在的,通过时间戳能让这些看做是异常的数据包被内核接收,将该参数的值设置为o,表示关闭该功能


net.ipv4.tcp_synack_retries

默认值:5 用于设置SYN重试的次数,在TCP的3次握手中的第2次握手,内核需要发送一个回应前面一个SYN的ACK的SYN,就是说为了打开对方的连接,内核发出的SYN的次数,减少该参数的值有利于避免DDOS功能


net.ipv4.tcp_syn_reries

默认值:5 用于设置在内核放弃建立连接之前发送SYN包的数量


net.ipv4.tcp_fin_timeout

默认值:60  表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间对端可以出错并永远不关闭连接


net.ipv4.tcp_keepalive_time

默认值:7200  当启用keepalive的时候,该参数用于设置TCP发送keepalive消息的额度