Linux内核参数调优是服务器运维中的高频操作。默认内核配置面向通用场景,在高并发Web服务、数据库集群或消息队列等特定负载下往往无法发挥硬件性能。通过sysctl调整网络栈、文件描述符、内存管理等参数,可以在不升级硬件的前提下显著提升服务器吞吐能力。
网络内核参数调优
网络参数是高并发场景调优的重点。TCP连接建立、数据传输、连接回收等环节都有对应的内核参数可配置。
TCP连接复用与回收:tcp_tw_reuse允许将TIME_WAIT状态的连接重新用于新的TCP连接,在高并发短连接场景下有效减少端口耗尽。tcp_fin_timeout控制FIN-WAIT-2状态持续时间,默认60秒过长,可缩短至15秒。
TCP缓冲区:tcp_rmem和tcp_wmem分别定义接收和发送缓冲区的最小/默认/最大值。大文件传输场景适当增大最大值,低延迟场景保持默认值以减少内存占用。
# /etc/sysctl.d/99-network-tuning.conf
# TCP连接复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# TCP保活
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
# TCP接收/发送缓冲区(单位:字节)
# 最小值 / 默认值 / 最大值
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# TCP窗口缩放
net.ipv4.tcp_window_scaling = 1
# SYN队列与ACK队列
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1
# 连接跟踪表大小(需配合nf_conntrack模块)
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_timeout_established = 7200
# 网卡队列与积压
net.core.netdev_max_backlog = 16384
net.core.somaxconn = 8192
# 应用参数后验证
sysctl -p /etc/sysctl.d/99-network-tuning.conf
sysctl net.ipv4.tcp_tw_reuse net.core.somaxconn
文件描述符限制配置
Linux中每个进程能打开的文件描述符数量受多层限制:系统级(fs.file-max)、用户级(ulimit)、systemd服务级(LimitNOFILE)。高并发服务如Nginx、MySQL默认的1024个文件描述符远远不够,需要逐层调整。
排查文件描述符使用情况:lsof | wc -l查看系统总打开数,ls /proc/<pid>/fd | wc -l查看单进程打开数,cat /proc/<pid>/limits | grep "Max open files"查看进程限制。
# 系统级限制:/etc/sysctl.conf
fs.file-max = 2097152
fs.nr_open = 2097152
# 用户级限制:/etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
# systemd服务级限制(以Nginx为例)
# /etc/systemd/system/nginx.service
[Service]
LimitNOFILE=1048576
# 修改后重载
systemctl daemon-reload
systemctl restart nginx
# 验证进程级限制
cat /proc/$(pgrep -o nginx)/limits | grep "Max open files"
TCP拥塞控制算法选择
Linux内核支持多种TCP拥塞控制算法,不同算法适合不同的网络环境。默认的cubic算法在长肥管道(高带宽延迟积)场景下可能无法充分利用带宽。BBR算法由Google开发,基于带宽和延迟探测而非丢包反馈,在弱网和高延迟场景下表现更优。
# 查看可用拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
# 切换为BBR
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
# 验证当前算法
sysctl net.ipv4.tcp_congestion_control
# 查看BBR状态
ss -ti | grep bbr
# BBR在内核4.9+可用,低版本需升级内核或使用xanmod
# Ubuntu/Debian安装新内核
apt install linux-generic-hwe-$(lsb_release -rs)
内存与Swap策略调优
vm.swappiness控制内核将匿名内存页交换到Swap的倾向,默认值60适合桌面环境,服务器场景建议降低到10或设为1,数据库服务器可直接设为0以尽量避免Swap。vm.dirty_ratio和vm.dirty_background_ratio控制脏页写入策略,影响磁盘IO的突发写入能力。
vm.overcommit_memory控制内存分配策略。值为1时内核始终允许内存分配,适合Redis等使用fork的场景;值为0时内核启发式判断,可能拒绝分配导致进程被OOM Killer杀掉。
# /etc/sysctl.d/99-memory-tuning.conf
# Swap策略
vm.swappiness = 10
# 脏页比例
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 内存分配策略(Redis场景设为1)
vm.overcommit_memory = 0
# 大页内存(HugePages)
# 查看当前大页配置
grep Huge /proc/meminfo
# 配置大页(以512个2MB大页为例)
echo 512 > /proc/sys/vm/nr_hugepages
# 持久化大页配置
vm.nr_hugepages = 512
内核参数调优不是一次性操作,需要在调整后持续监控服务器运行状态。使用sysstat包中的sar命令记录历史性能数据,结合ss -s查看TCP连接状态分布,nstat查看内核网络统计计数器,逐步验证调优效果。生产环境建议先在测试机验证参数,确认无副作用后再批量推广。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-nei-he-can-shu-diao-you-shi-zhan-wang-luo-tun-tu-yu/