1.连接跟踪表大小
net.netfilter.nf_conntrack_max
作用:控制内核同时能跟踪的网络连接数量上限(包含:TCP、UDP、ICMP等)
应用场景:有状态防火墙、NAT、WAF、负载均衡等
影响:
太小:高并发时表会满导致丢包,dmesg里会出现f_conntrack: table full, dropping packet
太大:每条记录大约占230~400B内存,调高会占用过多内存
2.文件描述符限制
fs.file-max
fs.nr_open
作用:
fs.file-max
:系统级最大可同时打开的文件数(包含socket)
s.nr_open
:单个进程理论可打开的最大文件数上限
影响:
如果业务(尤其是长连接)打开的FD数接近限制,会报Too many open files
必须配合ulimit -n
才能让进程世纪用到更高的值
3.网络队列
net.core.netdev_max_backlog
作用:内核网络接口接收队列的长度(数据包崽内核排队的最大数值)
场景:高PPS(包每秒)环境,防止因为内核处理不及时导致丢包
影响:
太小:高并发网卡丢包
太大:占内存(对大内存及其影响不大)
net.core.somaxconn
作用:监听socket的半连接队列最大长度
场景:高并发TCP服务器,防止新连接被拒绝
影响:
太小:高并发场景下可能会出现connection refuse
d或SYN backlog overflow
太大:会消耗更多内存在维护队列
4.本地端口范围
net.ipv4.ip_local_port_range
作用:系统为客户端动态分配的本地端口范围(临时端口)
默认:通常为32768 60999
,建议改为1024 65535
,增加可用端口
场景:高并发短连接客户端,防止端口耗尽
注意:范围太小可能会导致EADDRNOTAVAIL
错误
5.TCP SYN队列
net.ipv4.tcp_max_syn_backlog
作用:半连接对接大小(还未完成三次握手的连接数量上限)
场景:地域SYN Flood攻击,或在高连接建立速率下防止丢连接
影响:
太小:连接建立慢或丢失
太大:多占内存
6.TIME_WAIT优化
net.ipv4.tcp_max_tw_buckets
作用:TIME_WAIT状态socket最大数量
场景:HTTP等短连接服务会产生大量的TIME_WAIT
影响:
太小:TIME_WAIT太多会被强制清理,可能会导致端口复用时出现连接复位
太大:占内存
net.ipv4.tcp_fin_timeout
作用:FIN——WAIT2状态保持的秒数,决定连接管壁厚资源释放速度
影响:
太小:可能影响需要长FIN_WAIT2的协议
太大:占用socket资源
net.ipv4.tcp_tw_reuse
作用:允许重用TIME_WAIT状态的socket(只对客户端有效)
影响:减少TIME_WAIT占用的端口,适合短连接客户端
net.ipv4.tcp_tw_recycle
作用:快速回收TIME_WAIT
建议:保持0
7.TCP窗口与内存
net.ipv4.tcp_window_scaling
作用:是否允许TCP窗口缩放(支持大于64KB的接收窗口)
场景:高速网络(千兆/万兆)
net.ipv4.tcp_mem
作用:TCP全局内存使用阈值,包含三个值:min,pressure,max,单位:页,1页通常为4KB
(1)min:低于此值时TCP不会回收内存
(2)pressure:高于此值时会开始回收
(3)max:高于此值时会强制回收
场景:高带宽、大并发需要调高,否则可能触发TCP内存不足