内核参数速查是什么
sysctl 读写的是 /proc/sys 下的内核运行时参数,读用 sysctl 名称,写用 sysctl -w 或直接 echo 到对应文件。这里只覆盖少量与性能强相关、且改了确实有意义的参数;其余参数保持默认通常更安全。核心原则是:一次只改一项,改前记录当前值与改的理由,改后能回滚。
基本信息
| 适用平台 | Linux(所有发行版,procfs 为接口) |
|---|---|
| 查看 | sysctl 名称 / cat /proc/sys/路径 |
| 临时修改 | sysctl -w 名称=值(重启失效) |
| 持久化 | 写 /etc/sysctl.d/99-xxx.conf 后执行 sysctl --system(或 sysctl -p 指定文件) |
| 生效范围 | net.* 多为网络命名空间内生效,容器与宿主机互不影响 |
典型使用场景
- 内存换页行为调优:按业务内存模型调整 swappiness
- 高并发连接服务:提高 somaxconn 与 SYN 队列,与应用的 backlog 配套
- 单机大量连接:扩大本地端口范围,避免 TIME-WAIT 堆积导致端口不足
- 大数据与搜索类应用:提高 max_map_count,避免 mmap 数量超限报错
- 排查「改了不生效」:确认是命名空间内生效还是需要重启服务
常用示例
常用示例
sysctl vm.swappiness # 查看当前值
sysctl -w vm.swappiness=10 # 临时调整
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog # 一次查多个
cat /proc/sys/net/ipv4/ip_local_port_range # 本地端口范围
sysctl --system # 重载全部配置片段
sysctl -p /etc/sysctl.d/99-perf.conf # 只重载某个文件持久化配置
持久化配置
# /etc/sysctl.d/99-perf.conf
vm.swappiness = 10 # 降低换页倾向,数据库类服务常用
net.core.somaxconn = 4096 # 全连接队列上限,需与应用 backlog 配套
net.ipv4.tcp_max_syn_backlog = 4096 # 半连接队列上限
net.ipv4.ip_local_port_range = 10240 65000 # 客户端可用端口范围
fs.file-max = 2097152 # 系统级文件句柄上限常用参数与调整要点
| 参数 | 含义 | 调整要点 |
|---|---|---|
| vm.swappiness | 内核换页到 swap 的倾向 | 数据库通常调低;调 0 不代表完全禁用换页 |
| vm.overcommit_memory | 内存分配策略 | Redis 等场景有明确建议值,改动要按官方文档 |
| net.core.somaxconn | 已完成握手的等待队列上限 | 要同时调大应用的 backlog,否则单侧无效 |
| net.ipv4.tcp_max_syn_backlog | 半连接队列上限 | 配合 SYN 洪水防护与 somaxconn 一起看 |
| fs.file-max | 系统级文件句柄上限 | 还要配合 limits.conf 或 unit 的 LimitNOFILE |
| vm.max_map_count | 单进程 mmap 区域数上限 | 搜索引擎与大数据组件常见必调项 |
参数不是越多越好:somaxconn 要与应用侧 backlog 配套,swappiness 与业务内存模型相关,缓冲区类参数改大还可能带来内存放大。每次只改一项、记录改前值、观察足够长的时间再评估。
持久化优先写在 /etc/sysctl.d/ 下新增文件,而不是改 /etc/sysctl.conf:发行版自带的默认文件在包升级时可能被覆盖,独立文件更清晰也更容易回滚。写完必须 sysctl --system 或 sysctl -p 才生效,重启不验证等于没落地。