Linux 内核参数调优指南
一、概述
Linux 内核参数直接影响系统性能、网络吞吐、文件处理能力等关键指标。合理的内核调优可以显著提升服务器性能,尤其在高并发、大流量场景下效果明显。
本文档介绍常用内核参数的含义、推荐值及调优方法。
二、查看当前内核参数
2.1 查看所有参数
1 2 3 4 5 6
| sysctl -a
sysctl net.ipv4.tcp_max_syn_backlog sysctl vm.swappiness
|
2.2 查看参数配置文件
1 2 3 4 5
| cat /etc/sysctl.conf
ls /etc/sysctl.d/
|
三、网络相关参数调优
3.1 TCP 连接优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
net.core.netdev_max_backlog = 65535
|
3.2 TCP 缓冲区优化
1 2 3 4 5 6 7 8 9 10
| net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.rmem_max = 67108864 net.core.wmem_max = 67108864
net.ipv4.tcp_moderate_rcvbuf = 1
|
3.3 网络性能优化
1 2 3 4 5 6 7 8 9 10 11 12 13
| net.ipv4.tcp_fastopen = 3
net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr
net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0
net.ipv4.ip_forward = 0
|
四、内存相关参数调优
4.1 Swap 使用策略
1 2 3 4 5 6 7
| vm.swappiness = 10
|
4.2 内存分配策略
1 2 3 4 5 6 7 8 9
|
vm.overcommit_memory = 1
vm.overcommit_ratio = 50
vm.vfs_cache_pressure = 50
|
4.3 大页内存(HugePages)
1 2 3 4 5 6 7 8
|
vm.transparent_hugepage = always
vm.nr_hugepages = 1024
|
五、文件系统相关参数
5.1 文件描述符限制
1 2 3 4 5 6
| fs.file-max = 2097152
|
5.2 inode 缓存
1 2 3 4 5 6
| vm.vfs_cache_pressure = 50
vm.dirty_ratio = 20 vm.dirty_background_ratio = 10
|
5.3 文件监控
1 2 3
| fs.inotify.max_user_watches = 524288 fs.inotify.max_user_instances = 512
|
六、进程相关参数
6.1 进程数限制
1 2 3 4 5 6
| kernel.pid_max = 4194304
kernel.core_pattern = /var/core/core.%e.%p.%t
|
6.2 内核日志
1 2 3 4 5
| kernel.printk = 4 4 1 7
kernel.dmesg_buf_size = 16M
|
七、调优配置实战
7.1 高并发 Web 服务器配置
创建 /etc/sysctl.d/99-webserver.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| net.ipv4.tcp_max_syn_backlog = 8192 net.core.somaxconn = 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 net.core.rmem_max = 67108864 net.core.wmem_max = 67108864
net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr
fs.file-max = 2097152
vm.swappiness = 10 vm.vfs_cache_pressure = 50
|
7.2 数据库服务器配置
创建 /etc/sysctl.d/99-database.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| vm.swappiness = 1
vm.overcommit_memory = 2 vm.overcommit_ratio = 80
fs.file-max = 2097152 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10
net.ipv4.tcp_max_syn_backlog = 4096 net.core.somaxconn = 32768
|
7.3 容器宿主机配置
创建 /etc/sysctl.d/99-container.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
net.netfilter.nf_conntrack_max = 1048576
fs.inotify.max_user_watches = 524288 fs.inotify.max_user_instances = 512
vm.swappiness = 10 vm.overcommit_memory = 1
|
八、应用配置
8.1 临时生效(重启失效)
1 2 3 4 5
| sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -p /etc/sysctl.d/99-webserver.conf
|
8.2 永久生效
1 2 3 4 5 6 7
| vim /etc/sysctl.conf
vim /etc/sysctl.d/99-custom.conf
sysctl -p
|
8.3 验证配置
1 2 3 4 5 6
| sysctl net.ipv4.tcp_tw_reuse sysctl vm.swappiness
sysctl -a | grep -E "^(net\.|vm\.|fs\.|kernel\.)"
|
九、注意事项
9.1 调优前准备
备份原配置
1
| sysctl -a > /tmp/sysctl_backup_$(date +%Y%m%d).conf
|
记录当前性能基线
1 2 3 4 5 6
| iperf3 -s & iperf3 -c server_ip
fio --name=randread --ioengine=libaio --iodepth=1 --rw=randread \ --bs=4k --direct=0 --size=1G --numjobs=4 --runtime=60
|
9.2 调优原则
- 渐进式调整:每次只调整少量参数,观察效果
- 场景适配:根据实际业务场景选择配置
- 监控验证:调优后持续监控性能指标
- 回滚准备:保留原配置以便快速回滚
9.3 常见问题
| 问题 |
可能原因 |
解决方案 |
| 连接拒绝 |
somaxconn 太小 |
增大 net.core.somaxconn |
| TIME_WAIT 过多 |
tcp_tw_reuse 未开启 |
设置 net.ipv4.tcp_tw_reuse=1 |
| OOM Killer 频繁 |
swappiness 太高 |
降低 vm.swappiness |
| 磁盘 IO 瓶颈 |
dirty_ratio 太大 |
调整 vm.dirty_ratio |
十、总结
内核参数调优是系统性能优化的重要环节,但需要遵循以下原则:
- 理解参数含义:不要盲目照搬配置
- 测试环境验证:生产环境变更前必须测试
- 持续监控:调优后观察系统表现
- 文档记录:记录变更内容和效果
合理的内核调优可以让系统性能提升 20%-50%,但过度调优可能适得其反。建议根据实际业务场景,选择合适的参数组合。