sysctl 配置内核参数
sysctl 用来读写内核运行参数,覆盖网络、内存、文件系统与进程管理等子系统。它的使用陷阱在于「临时改」和「永久改」是两条路:命令行方式只改内存里的值,重启即恢复;要持久化必须把参数写进配置文件,再由系统在启动时加载。生产环境的规范做法是把自定义参数集中放在独立配置目录下的文件里,用数字前缀命名控制加载顺序,改完执行一次加载并核对实际生效值。
基本信息
| 临时生效 | 用命令行写入参数,重启后失效 |
|---|---|
| 持久化位置 | /etc/sysctl.d/ 下的配置文件 |
| 加载命令 | 重新加载全部配置或指定文件 |
| 核对方式 | 读取单个参数的实际值 |
| 同名参数优先级 | 按文件名排序,靠后的生效 |
| 权限 | 读写内核参数需 root 或提权 |
典型使用场景
- 网络转发:宿主机充当网关或承载容器网络时开启转发
- 连接调优:调整连接跟踪与队列上限,支撑高并发业务
- 文件句柄上限:为高连接数服务放开系统级限制
- 内存行为调整:按业务特点调整缓存与交换策略
- 临时验证:命令行方式先验证效果,确认无误再持久化
- 基线管理:把调优参数纳入交付基线,逐台核对
写入持久配置并生效
写入持久配置并生效
# 把自定义参数写进独立文件,文件名前缀控制加载顺序
# net.ipv4.ip_forward = 1
# fs.file-max = 2097152
sysctl --system # 重新加载全部配置文件
sysctl -n net.ipv4.ip_forward # 只输出值,便于脚本判断
sysctl -n fs.file-max
sysctl -w net.ipv4.ip_forward=1 # 临时生效,仅用于验证配置方式对照
| 方式 | 生效范围 | 适用场景 |
|---|---|---|
| 命令行写入 | 立即生效,重启丢失 | 临时验证效果 |
| 独立配置文件 | 重启后持续生效 | 生产环境的规范做法 |
| 指定文件加载 | 仅加载该文件 | 单次调试或脚本化变更 |
| 全量加载 | 加载所有配置目录 | 变更后统一生效 |
| 读取当前值 | 只读 | 变更后核对实际生效值 |
旧资料习惯直接改传统配置文件位置,新系统推荐在配置目录下按用途分文件管理:这样变更范围清晰,回滚只需删除对应文件,也不会和其他模块的调优参数互相踩踏。同名参数出现多次时,按文件名排序靠后的那份生效。
内核参数改动的影响面通常比想象中大:网络类参数直接关系连接与转发行为,资源类参数关系内存回收策略。生产变更应有评审、有回滚预案,并且先在一台机器上验证,确认加载过程没有报错、业务指标正常后再推广。