Nginx调优了、应用优化了,高并发时还是上不去?瓶颈可能在Linux内核的默认参数——它们是为通用场景设的,面对高并发Web服务偏保守。通过sysctl调优内核参数,能进一步榨出性能。本文给出实用的内核调优配置。
一、内核参数在哪调?
Linux内核参数通过 sysctl 管理:
sysctl -a # 查看所有当前参数
sysctl net.ipv4.tcp_fin_timeout # 查看某个参数
sysctl -w 参数=值 # 临时修改(重启失效)
# 永久修改:写入 /etc/sysctl.conf 或 /etc/sysctl.d/ 下的文件
sysctl -p # 重新加载配置生效
二、文件描述符限制(高并发第一坎)
每个连接占一个文件描述符,默认限制在高并发时会成为瓶颈(“too many open files”错误)。需要同时调内核和用户限制:
# /etc/sysctl.conf
fs.file-max = 1000000
# /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
配合Nginx的 worker_rlimit_nofile(参考Nginx调优篇),连接数才真正上得去。
三、TCP网络栈优化(高并发核心)
这是高并发Web服务的重点,常用参数:
# 增大连接队列(应对突发连接)
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
# 快速回收TIME_WAIT连接(高并发短连接场景)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# 端口范围(增大可用端口)
net.ipv4.ip_local_port_range = 1024 65535
# 增大缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
这些参数让内核能处理更多并发连接、更快回收资源、用更大的网络缓冲区。
四、开启BBR(网络吞吐)
内核调优别忘了BBR拥塞控制算法(参考博客BBR篇),提升丢包网络下的吞吐:
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
五、其他实用参数
# 减少swap使用倾向(参考swap篇)
vm.swappiness = 10
# 开启TCP Fast Open
net.ipv4.tcp_fastopen = 3
# 连接跟踪表(高并发/大量连接时,防止表满)
net.netfilter.nf_conntrack_max = 1000000
六、生效与验证
# 应用所有配置
sysctl -p
# 验证某参数已生效
sysctl net.core.somaxconn
# 高并发测试对比(参考压测篇)
wrk -t8 -c1000 -d30s https://你的域名/
调优前后用压测对比,看并发承载和错误率的变化,用数据验证效果。
七、重要注意事项
- 别盲目照抄:参数要按你的业务场景和内核版本调整,不同场景(短连接vs长连接、Web vs 数据库)侧重不同;
- 逐步调、做记录:一次改一批不易定位问题,重要参数改动做好记录;
- 先测试环境验证:内核参数影响全局,生产前在测试机验证(用免费试用机很合适);
- 有些参数需内核支持:如BBR需较新内核、conntrack需加载对应模块;
- 虚拟机的限制:OpenVZ等共享内核的VPS无法自主调内核参数——这又是选KVM独享虚拟化的理由(有独立内核,参数随你调,参考虚拟化区别篇)。
结论
内核参数调优是高并发性能的最后一层优化:调大文件描述符、优化TCP栈(连接队列、TIME_WAIT回收、端口范围、缓冲区)、开BBR、调低swappiness。它和应用、Nginx调优一起,构成完整的性能优化链条。记住:按场景调、先测试、KVM才能调内核。底层的好硬件好线路 + 全链路调优,才能让你的服务器发挥全部实力。