文档首页> 技术教程> sysctl 内核参数:文件数与 TCP 常用调优

sysctl 内核参数:文件数与 TCP 常用调优

发布时间:2026-06-10 15:32        更新时间:2026-06-11 12:54
内核参数听起来高深,日常运维真正常用的就十几项,集中在两个入口:/etc/sysctl.conf 放持久配置,sysctl -a 看全部当前值。改错的代价不小,动手前把每个参数管什么弄清楚,比背调优模板重要。 ## 文件数上限:fs.file-max fs.file-max 是全系统允许打开的文件描述符总量。出现 too many open files、而各进程的 ulimit 都还宽裕时,才是它在报警。查看与临时设置: ``` sysctl fs.file-max sudo sysctl -w fs.file-max=1048576 ``` 持久化写进 /etc/sysctl.d/99-tuning.conf,执行 sudo sysctl -p /etc/sysctl.d/99-tuning.conf 立即生效;这个目录下的文件按文件名顺序在开机时自动加载,sysctl --system 可手动重载全部。注意单进程的上限由 ulimit 与 systemd 的 LimitNOFILE 管,别和这个参数混为一谈。两层的典型分工:全局总量调大靠 fs.file-max,单服务调大靠 LimitNOFILE,报警时先分清是哪一层顶到。 ## 监听队列:somaxconn 应用监听端口时有一个等待队列,队列长度受内核 net.core.somaxconn 封顶。突发流量下应用日志出现连接被重置或丢弃、CPU 却不高,通常是队列太小: ``` sysctl net.core.somaxconn sudo sysctl -w net.core.somaxconn=4096 ``` 应用侧的 backlog 参数也要相应调大,两边对齐才有意义。想直接看当前实际值,ss -tln 输出里监听套接字的 Send-Q 一列就是生效的队列上限,改完用这条命令复查,确认内核真的吃下了新值。 ## TIME-WAIT 复用与端口范围 高并发短连接场景,客户端侧会堆积大量 TIME-WAIT 状态的连接。net.ipv4.tcp_tw_reuse=1 允许作为客户端时复用这些端口,能缓解端口耗尽;出方向可用端口范围由 net.ipv4.ip_local_port_range 控制,默认大约三万个,压力大的机器可以放宽。它只在出方向起作用,服务端堆积 TIME-WAIT 靠它解决不了,那要检查是否该启用长连接,连接复用比调参数更治本,应用层支持的话优先上。 ## 改参数的规矩 一改一验证:改一项,sysctl -p,观察业务指标,再改下一项;改动前把原值记进变更记录。内核参数没有万能模板,别人的机器跑得好的数值,照抄过来未必合适,理解含义比抄数字可靠。