sysctl 命令详解
更新时间:2026-09-17。「一个命令一个文档」系列,属于硬件与内核族。它在运行时读写
/proc/sys/下的内核参数,是网络/内存/文件句柄调优的统一入口(背景见内核网络调优)。
一、查看
bash
sysctl net.core.somaxconn # 读单个参数
sysctl -a | grep tcp # 列出全部参数并过滤
cat /proc/sys/net/core/somaxconn # 等价的 procfs 路径写法
sysctl net.ipv4.ip_forward二、修改:临时 vs 持久
bash
# 临时(立即生效,重启丢失)
sudo sysctl -w net.core.somaxconn=65535
echo 65535 | sudo tee /proc/sys/net/core/somaxconn # 等价 procfs 直写
# 持久:写配置文件再加载
echo 'net.core.somaxconn=65535' | sudo tee /etc/sysctl.d/99-tuning.conf
sudo sysctl -p /etc/sysctl.d/99-tuning.conf # -p 从文件加载
sudo sysctl --system # 按顺序加载全部 sysctl.d(开机等价动作)直接
-w只在本次运行有效;要跨重启必须落到/etc/sysctl.conf或/etc/sysctl.d/*.conf。改完用sysctl <key>回读确认,别只看文件。
三、高频参数
| 参数 | 作用 | 常见值/注意 |
|---|---|---|
net.core.somaxconn | 每端口全连接队列上限 | 高并发调大 4096/65535,见握手队列 |
net.ipv4.tcp_max_syn_backlog | 半连接(SYN)队列 | 与 somaxconn 配套 |
net.ipv4.ip_local_port_range | 出站本地端口范围 | 大量主动连出时扩到 1024 65535 |
net.ipv4.tcp_tw_reuse | 复用 TIME_WAIT 端口做新出站连接 | 客户端安全常用,见 TIME_WAIT |
net.ipv4.ip_forward | 是否转发 IPv4 包 | 路由器/NAT/容器网关开 1 |
fs.file-max | 系统级文件句柄总量 | 配合 ulimit -n |
vm.swappiness | 倾向用 swap 的程度 0-100 | 数据库常调小(1/10),不是禁用 swap |
vm.overcommit_memory | 内存超卖策略 | 特殊场景(如 Redis)设 1 |
net.ipv4.tcp_congestion_control | 拥塞算法 cubic/bbr | 见拥塞控制 |
四、注意事项
- 部分参数只在初始网络命名空间生效或对全系统生效;容器里改 sysctl 受 capability 和命名空间白名单限制(如
net.*需NET_ADMIN且属可命名空间化的键),K8s 通过 securityContext.sysctls 管控。 - 不要盲目照搬"高并发 sysctl 大全":例如已无
tcp_tw_recycle(内核 4.12 移除,开了反而踩坑);参数要结合瓶颈证据调整(nstat 看队列溢出/重传)。 - 名字到 proc 路径的映射:点变斜杠,
net.ipv4.ip_forward→/proc/sys/net/ipv4/ip_forward。
相关命令
总结
sysctl 是 /proc/sys 内核参数的运行时读写入口:-a 列全部、-w key=val 立即但临时生效、写 /etc/sysctl.d/*.conf 加 sysctl -p/--system 持久化;高频调 net.core.somaxconn、tcp_tw_reuse、ip_forward、fs.file-max、vm.swappiness 等;改前看现状、改后回读、用瓶颈数据驱动而非照搬模板,并注意容器命名空间与 NET_ADMIN 限制。