一、 完整的内核优化配置
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
二、各参数解释说明
1、内核转发功能
net.ipv4.ip_forward = 0
0表示关闭内核转发,1表示开启内核转发。
在Linux系统中出于系统安全考虑,在默认情况下,Linux系统是禁止数据包转发的。
数据包转发:指的是当主机拥有多个网卡时,通过一个网卡接收到的数据包,根据目的IP地址来转发数据包到其他网
卡。这个功能通常用于路由器。
2、设置数据传输长连接持续时间
net.ipv4.tcp_keepalive_time = 600
Linux系统在连接资源上进行了一些设置管控,在连接长时间(设置的时间)无数据传输时,我们释放连接腾出资源。
同时在长连接未释放阶段又能连接复用避免了新创建连接和三次握手进而提高效率
3、net.ipv4.tcp_fin_timeout
net.ipv4.tcp_fin_timeout = 30
这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间(表示从Fin_WAIT_2
到TIME_WAIT的超时时间)。默认是60s。
长时间收不到对端FIN包,大概率是对端机器有问题,不能及时调用close()关闭连接,建议调低,
避免等待时间太长,资源开销过大
4、net.ipv4.tcp_tw_recycle
net.ipv4.tcp_tw_recycle=1
这个参数用于设置启用timewait快速回收,默认为0表示关闭。开启后,TIME_WAIT状态的连接不用等待
2MSL时间就可用于新建连接。一般尤其是对于测试进行压测要开启。
5、net.ipv4.tcp_tw_reuse
net.ipv4.tcp_tw_reuse=1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,
默认为0,表示关闭。一般测试压测都会开启。
6、net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65000
这个参数定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围
7、tcp_max_tw_buckets
系统TIME_WAIT连接的最大数量,根据实际业务需要调整该参数默认为180000,过多的TIME_WAIT套接
字会使Web服务器变慢,如果超过这个数字会出现如下:
1、多出的TIME_WAIT套接字将立刻被清
2、dmesg会有报错
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow产生的影响:
原因是超过了linux系统tw数量的阀值。危害是超过阀值后,系统会把多余的time-wait socket 删除掉,
并且显示警告信息,如果是NAT网络环境又存在大量访问,会产生各种连接不稳定断开的情况。同时高并
发短连接会让服务器在短时间范围产生的大量time_wait,该状态下socket占用大量端口号,最终导致
端口号耗尽,进而客户端访问无法建立新的连接。
8、fs.file-max
fs.file-max = 655350
系统级别所有进程打开总文件数限制,是对整个系统的限制,并不是针对用户的,限制了该系统所有用户
和进程线程所打开的文件数量不能超过这个值。
拓展:
ulimit -n:用来查看当前用户单个进程打开文件数限制。通过修改:/etc/security/limits.conf
9、net.ipv4.tcp_syn_retries
net.ipv4.tcp_syn_retries的设置,表示应用程序进行connect()系统调用时,在对方不返回SYN +
ACK的情况下(也就是超时的情况下),第一次发送之后,内核最多重试几次发送SYN包;并且决定了等待时间。
实例场景:预发环境入口通过域名访问,网页响应十分缓慢,可设置此参数将重试次数改为5次
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
10、net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65535该参数表示与远程服务器建立连接时启用的端口范围。
场景:在高并发情况下,由于端口范围设置太小,每建立起来一个socket连接就会消耗掉一个端口号,
一旦可用随机端口号被耗尽。虚拟机所能建立的连接也就到顶,从而无法建立更多的连接。