文章是对 Linux 内核参数管理与优化 的系统性总结,结合实际运维场景展开说明:
一、什么是内核参数(sysctl)
内核参数是Linux 内核运行时的可调变量,主要用于控制:
类别 | 说明 |
---|---|
网络性能 | TCP 缓冲、连接追踪、端口范围等 |
文件系统 | 文件句柄数量、inode 限制等 |
内存管理 | 页面缓存、OOM 策略 |
安全控制 | IP 转发、内核防护参数 |
调度与进程 | 最大线程数、进程限制等 |
这些参数存在于 /proc/sys
目录中,也可通过 sysctl
命令进行管理。
二、查看和修改内核参数的方法
1)临时修改(立即生效,重启失效)
ini
# 查看参数
sysctl net.ipv4.tcp_syncookies
# 临时修改
sysctl -w net.ipv4.tcp_syncookies=1
或直接修改 /proc
目录:
bash
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
2)永久修改
编辑配置文件:
bash
vi /etc/sysctl.conf
添加:
ini
net.ipv4.tcp_syncookies = 1
fs.file-max = 1000000
使其生效:
css
sysctl -p
也可以分模块写到 /etc/sysctl.d/*.conf
中(现代系统推荐用法)。
三、常见的内核参数优化项(按场景)
1)网络优化(高并发服务)
ini
# 连接追踪表
net.netfilter.nf_conntrack_max = 1000000
# 端口可用范围扩大
net.ipv4.ip_local_port_range = 1024 65535
# TCP 优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 4096
2)文件句柄优化(高 IO 服务)
ini
fs.file-max = 1000000
配合 ulimit
:
bash
ulimit -n 1000000
3)内存与OOM控制
ini
vm.overcommit_memory = 1 # Redis 建议
vm.swappiness = 10 # 降低 swap 使用倾向
vm.dirty_ratio = 10 # 写缓冲比
vm.dirty_background_ratio = 5
4)安全与防御
ini
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
kernel.kptr_restrict = 1
kernel.randomize_va_space = 2
四、排查和调优建议
步骤 | 操作 |
---|---|
查看所有当前参数 | sysctl -a |
检查某参数作用 | man 7 sysctl 或 man tcp |
变更后立即生效 | sysctl -p 或 sysctl -w |
永久保存并统一管理 | 放入 /etc/sysctl.d/99-custom.conf |
五、举例
- 高并发 API 网关:
- 优化
tcp_max_syn_backlog
、somaxconn
、conntrack_max
ulimit -n
设置 1M 以上,防止文件句柄耗尽
- Redis 大内存机器:
- 设置
vm.overcommit_memory=1
、vm.max_map_count
提高内存分配容忍度
- 使用自动化工具统一管理(如 Ansible 或 SaltStack 推送 sysctl 配置)
六、一句话总结
内核参数优化是高并发与大规模系统稳定性的基础,应根据实际业务特征有针对性地调整,结合监控和压测不断迭代,而非一味套用模板。