Linux - 内核参数调优详解
2021年07月09日 14:03:31 [原创]
网卡接收数据包的速率比内核处理这些包的速率快时,允许送到网络子系统队列的数据包的最大数目
net.core.netdev_max_backlog=4096
全连接队列长度,而nginx定义的NGX_LISTEN_BACKLOG 默认为511
net.core.somaxconn=40960
半连接队列长度
net.ipv4.tcp_max_syn_backlog=40960
扩展本地端口范围
net.ipv4.ip_local_port_range=’1024 65000’
表示当keepalive启用时,TCP发送keepalive消息探活的频度。默认是2小时,若将其设置的小一些,可以更快地清理无效的连接。
net.ipv4.tcp_keepalive_time=60
缩短FIN-WAIT-2状态的超时时间
net.ipv4.tcp_fin_timeout = 60
开启TIME_WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_reuse=1 #存在隐患和风险,慎重开启
只在内网建议开启
禁用慢启动,网络环境稳定高速的环境关闭(内网、骨干网,在wifi等不稳定的网络中建议开启),如文件下载、视频流传输等,尤其是在网络连接容易出现短暂中断的情况下。
net.ipv4.tcp_slow_start_after_idle=0
服务端和客户端都开启fastopen功能,只建议在内网互相通信的机器之间开启
net.ipv4.tcp_fastopen=3 #其中1表示客户端开启,2表示服务端开启,3表示客户端和服务器同时开启
bbr算法适用于高速、长距离的网络环境,如数据中心之间的互联、广域网连接等,能够显著提高网络的传输性能
net.ipv4.tcp_congestion_control=bbr #需内核4.9及以上才支持, 默认cubic
将系统默认的排队规则设置为 fq_codel。fq_codel 是一种结合了公平排队(Fair Queuing,FQ)和受控延迟(Controlled Delay,CoDel)算法的排队规则,特别适合对延迟敏感的应用,如实时视频会议、在线游戏等。
net.core.default_qdisc=fq_codel #默认pfifo_fast,只在延迟高的场景开启,如实时视频会议、在线游戏等
安全加固
启用SYN Cookies,用于防御SYN洪水攻击
net.ipv4.tcp_syncookies=1
禁止IP转发
net.ipv4.ip_forward = 0
开启反向路径过滤,防止IP欺骗
net.ipv4.conf.default.rp_filter=1
不接受源路由选项,提高安全性
net.ipv4.conf.default.accept_source_route = 0
TIME_WAIT套接字的最大数量
net.ipv4.tcp_max_tw_buckets = 6000
处于孤儿状态(失去应用程序控制的连接)的最大TCP连接数。可以防止简单的Dos攻击。如果内存足够,可以增大,避免正常的孤儿连接被丢弃
net.ipv4.tcp_max_orphans=262144
缓冲区大小调整
启用SACK(Selective Acknowledgment),改进TCP性能
net.ipv4.tcp_sack=1
启用窗口缩放,增加TCP窗口大小以提升大带宽高延迟网络下的性能
net.ipv4.tcp_window_scaling=1
单个TCP接收缓冲区的最小、默认和最大值(字节)
net.ipv4.tcp_rmem = 4096 87380 6291456
单个TCP发送缓冲区的最小、默认和最大值(字节)
net.ipv4.tcp_wmem = 4096 16384 4194304
单个socket默认的写入缓冲区大小(字节)
net.core.wmem_default=8388608 #较大
net.core.wmem_default=212992 #默认
单个socket默认的读取缓冲区大小(字节)
net.core.rmem_default=8388608
单个socket最大的读取缓冲区大小(字节)
net.core.rmem_max=16777216
单个socket最大的写入缓冲区大小(字节)
net.core.wmem_max=16777216
启用时间戳选项,有助于TCP连接的管理
net.ipv4.tcp_timestamps = 1
TCP内存压力阈值设置,管理全局TCP总内存的使用,单位是page
net.ipv4.tcp_mem = 94500000 915000000 927000000
2097152 4194304 6291456
765786 1021048 1531572
–低水位线:当TCP使用的内存少于这个值时,内核认为内存充足,不会对TCP流量进行限制。
–压力模式:当TCP使用的内存达到这个值时,内核将进入内存压力模式,开始对TCP缓冲区的大小进行调节,内核主动降低接收窗口(rwnd),减少对端发送速率,主动释放空闲缓冲区内存和丢弃非关键数据包减少内存使用。
–上限:当TCP使用的内存超过这个值时,内核会拒绝一些新的网络连接请求,dmesg输出TCP: out of memory
设置连接跟踪表的最大值
net.ipv4.ip_conntrack_max = 6553500
处于 ESTABLISHED 状态的 TCP 连接在连接跟踪表中保持记录的最长时间,单位为秒。
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=7200
禁用SysRq键,避免误操作导致系统崩溃
kernel.sysrq=0
在生成core文件时包含PID信息
kernel.core_uses_pid=1
消息队列的最大字节数
kernel.msgmnb=65536
单个消息的最大字节数
kernel.msgmax=65536
单个共享内存段的最大值(字节)
kernel.shmmax=kernel.shmmax = 18446744073692774399
系统范围内可以分配的共享内存总量(页)
kernel.shmall=18446744073692774399