欢迎光临
我们一直在努力

【基础设施管理】03-Linux内核网络参数调优:解决高并发下的连接问题

专栏: 基础设施管理
难度: 进阶
标签: Linux 内核参数 sysctl 高并发 TCP调优


前言

当服务压测到几万QPS时,应用本身没问题,但连接失败、延迟飙高,这时候就需要调整内核网络参数。本文整理了生产中最实用的调优方案,附完整配置。


一、问题场景

常见症状:

  • accept: Too many open files
  • connect: Cannot assign requested address
  • 大量 TIME_WAIT 状态连接
  • SYN flood 或连接队列溢出

二、核心参数详解

2.1 文件描述符限制

# 查看当前限制
ulimit -n

# 临时修改(当前会话)
ulimit -n 1048576

# 永久修改
cat >> /etc/security/limits.conf << 'EOF'
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
EOF

# 查看系统级最大文件描述符数
sysctl fs.file-max

2.2 TCP连接队列

# 半连接队列大小(SYN队列)
sysctl -w net.ipv4.tcp_max_syn_backlog=65535

# 全连接队列大小(accept队列)
sysctl -w net.core.somaxconn=65535

# 注意:应用的 listen() 的 backlog 参数也要跟着调大

2.3 TIME_WAIT 优化

# 开启TIME_WAIT的快速回收(NAT环境下不建议开)
sysctl -w net.ipv4.tcp_tw_reuse=1

# 允许将TIME_WAIT的端口分配给新连接
sysctl -w net.ipv4.tcp_tw_recycle=0 # 不建议开,会导致NAT问题

# TIME_WAIT最大数量
sysctl -w net.ipv4.tcp_max_tw_buckets=200000

2.4 端口范围扩展

# 可用的临时端口范围(客户端发起连接时使用)
sysctl -w net.ipv4.ip_local_port_range="1024 65535"

2.5 TCP keepalive(保活)

# 连接空闲多久开始发keepalive探测(秒)
sysctl -w net.ipv4.tcp_keepalive_time=600

# 每次探测间隔(秒)
sysctl -w net.ipv4.tcp_keepalive_intvl=60

# 探测次数(超过这个次数认为连接断开)
sysctl -w net.ipv4.tcp_keepalive_probes=3


三、完整生产配置

将以下内容写入 /etc/sysctl.d/99-network-tuning.conf:

# 文件描述符
fs.file-max = 1048576

# TCP连接队列
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# 网络接收/发送缓冲
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728

# TIME_WAIT优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 200000
net.ipv4.ip_local_port_range = 1024 65535

# TCP keepalive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3

# 快速回收FIN_WAIT2状态
net.ipv4.tcp_fin_timeout = 15

# 开启SYN cookies(防SYN flood)
net.ipv4.tcp_syncookies = 1

# 禁用ICMP重定向(安全加固)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# 应用配置
sysctl -p /etc/sysctl.d/99-network-tuning.conf

# 验证
sysctl net.core.somaxconn


四、验证调优效果

# 查看当前TCP连接状态统计
ss -s

# 查看TIME_WAIT连接数量
ss -ant | grep TIME-WAIT | wc -l

# 查看监听队列溢出情况
netstat -s | grep -i overflow

# 实时观察连接数变化
watch -n 1 'ss -s'


结语: 内核参数调优不是银弹,要根据业务特点做针对性调整。调整前一定备份原始配置,调整后持续监控效果。

赞(0)
未经允许不得转载:171主机测评 » 【基础设施管理】03-Linux内核网络参数调优:解决高并发下的连接问题
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址