适用场景
调优要按负载类型来,别抄网上的「万能参数」。数据库、Web、消息队列关注点完全不同。正确做法是:先量化瓶颈,再改一到两个参数,改完复测,能回滚。
配置步骤(sysctl 参数基线)
# 1) 现状快照
sysctl -a | grep -E 'somaxconn|tcp_max_syn|file-max|swappiness|ip_local_port_range'
# 2) 常见基线(按业务调整,示例值)
cat > /etc/sysctl.d/90-jz.conf <<'EOF'
# 连接与队列
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 16384
# TIME_WAIT 与端口
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65000
net.ipv4.tcp_fin_timeout = 15
# 连接跟踪(有 NAT/容器时关注)
net.netfilter.nf_conntrack_max = 262144
# 内存
vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
EOF
sysctl --system
# 3) 复测
sysctl net.core.somaxconn
关键参数与建议
- 先测再调:用基线数据(CPU/内存/IO/网络)确认瓶颈在哪一层
- 一次一改:一次只改少量参数,改完复测,保留回退路径
- sysctl 基线:连接跟踪、文件句柄、TCP 队列、内存回收策略按业务调
- 文件系统:数据库用 XFS 或 ext4 按厂商建议,挂载参数不要乱加 noatime
- inode 治理:小文件多的目录要单独监控 inode,磁盘没满也可能写不进去
- 磁盘水位:数据盘 75% 预警,日志盘 80% 预警
- IO 调度:SSD/NVMe 用 none/mq-deadline,机械盘按场景选择
- 记录:调优参数写进配置管理,别只在内存里生效(重启就丢)
容易踩的坑
- 参数从网上抄,业务是 Web 结果套了数据库参数
- 只改 /etc/sysctl.conf 不写 sysctl.d,被其它文件覆盖
- 改了不重启也生效但没持久化,重启后回到默认
- nf_conntrack 满导致「网络莫名丢包」
- swappiness=0 在内存紧张时触发 OOM 更凶
- 参数改完没有复测,不知道有没有效果
验证与巡检
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog vm.swappiness
cat /proc/sys/net/netfilter/nf_conntrack_count 2>/dev/null
cat /proc/sys/net/netfilter/nf_conntrack_max 2>/dev/null
# conntrack 使用率 < 70%
- 巡检:参数与配置文件一致、重启后仍生效、conntrack 水位正常、有调优记录
小结
调优验收:每个改动的参数都有基线数据、有效果对比、可回滚方式,并且写进了配置管理。拍脑袋改参数等于埋雷。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。