Linux 内核调优完整参数指南
在搬瓦工 VPS 上运行高负载应用时,默认的 Linux 内核参数往往无法充分发挥硬件性能。通过合理调整 sysctl 参数,可以显著提升网络吞吐量、降低延迟、优化内存使用效率。本文将系统讲解内核调优的核心参数,帮助你在搬瓦工 VPS 上获得最佳性能表现。
一、查看和修改内核参数的方法
Linux 提供 sysctl 命令来查看和修改运行时内核参数。所有可调参数位于 /proc/sys/ 目录下。
1.1 查看当前参数
# 查看所有内核参数
sysctl -a
# 查看特定参数
sysctl net.core.somaxconn
# 通过 /proc 文件系统查看
cat /proc/sys/net/core/somaxconn
1.2 临时修改参数
# 使用 sysctl 命令临时修改(重启后失效)
sysctl -w net.core.somaxconn=65535
# 直接写入 /proc 文件系统
echo 65535 > /proc/sys/net/core/somaxconn
1.3 永久修改参数
将参数写入 /etc/sysctl.conf 或 /etc/sysctl.d/ 目录下的配置文件,重启后仍然生效:
# 创建自定义配置文件
cat > /etc/sysctl.d/99-custom.conf <<EOF
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
EOF
# 立即加载配置
sysctl -p /etc/sysctl.d/99-custom.conf
二、网络参数调优
网络参数是 VPS 调优中最关键的部分,直接影响连接处理能力和传输效率。
2.1 TCP 连接队列
# 监听队列最大长度,影响并发连接能力
net.core.somaxconn = 65535
# SYN 队列长度,防止 SYN Flood 时丢弃合法连接
net.ipv4.tcp_max_syn_backlog = 65535
# 开启 SYN Cookie 防护 SYN Flood 攻击
net.ipv4.tcp_syncookies = 1
somaxconn 控制 listen() 系统调用时最大挂起连接数。对于运行 Nginx 或 Node.js 等高并发应用的搬瓦工 VPS,建议设置为 65535。
2.2 TCP 缓冲区
# TCP 接收缓冲区(最小值 默认值 最大值,单位字节)
net.ipv4.tcp_rmem = 4096 87380 67108864
# TCP 发送缓冲区
net.ipv4.tcp_wmem = 4096 65536 67108864
# 全局接收缓冲区最大值
net.core.rmem_max = 67108864
# 全局发送缓冲区最大值
net.core.wmem_max = 67108864
# 默认接收缓冲区大小
net.core.rmem_default = 1048576
# 默认发送缓冲区大小
net.core.wmem_default = 1048576
对于带宽较高的搬瓦工方案(如 CN2 GIA-E),适当增大缓冲区可以提升大文件传输速度。最大值设为 64MB 适合大多数场景。
2.3 TCP 连接复用与回收
# 开启 TIME_WAIT 状态 socket 快速回收
net.ipv4.tcp_tw_reuse = 1
# TIME_WAIT 状态的最大数量
net.ipv4.tcp_max_tw_buckets = 500000
# TCP keepalive 探测间隔(秒)
net.ipv4.tcp_keepalive_time = 600
# keepalive 探测次数
net.ipv4.tcp_keepalive_probes = 5
# 每次探测的间隔
net.ipv4.tcp_keepalive_intvl = 15
# FIN_WAIT2 状态超时时间
net.ipv4.tcp_fin_timeout = 15
2.4 TCP 窗口与拥塞控制
# 开启窗口缩放,支持大于 64KB 的 TCP 窗口
net.ipv4.tcp_window_scaling = 1
# 开启 TCP 时间戳
net.ipv4.tcp_timestamps = 1
# 开启选择性确认 SACK
net.ipv4.tcp_sack = 1
# 设置拥塞控制算法为 BBR
net.ipv4.tcp_congestion_control = bbr
# 默认队列调度算法
net.core.default_qdisc = fq
BBR 拥塞控制算法对跨境网络特别有效,建议在搬瓦工 VPS 上启用。详细的拥塞控制算法对比请参考 TCP 拥塞控制算法详解。
2.5 网络设备队列
# 网络设备最大积压队列长度
net.core.netdev_max_backlog = 65535
# 每个 CPU 处理数据包的速率限制(0 为不限制)
net.core.netdev_budget = 600
# 网络接口的最大传输队列长度
net.core.optmem_max = 25165824
三、内存参数调优
3.1 虚拟内存管理
# 控制 swap 使用倾向(0-100,越低越倾向使用物理内存)
vm.swappiness = 10
# 控制内核回收目录和 inode 缓存的倾向
vm.vfs_cache_pressure = 50
# 脏页占系统内存的最大比例(%)
vm.dirty_ratio = 40
# 脏页开始回写的比例阈值
vm.dirty_background_ratio = 10
# 脏页最大存活时间(百分之一秒)
vm.dirty_expire_centisecs = 3000
# 脏页回写间隔
vm.dirty_writeback_centisecs = 500
搬瓦工 VPS 的内存通常较为有限,将 swappiness 设为 10 可以减少不必要的 swap 操作。如果运行数据库等内存密集型应用,可以进一步降低到 1。
3.2 内存过量提交
# 内存过量提交策略
# 0 = 启发式判断(默认)
# 1 = 始终允许
# 2 = 不允许超出物理内存+swap 的一定比例
vm.overcommit_memory = 0
# 当 overcommit_memory=2 时的比例限制
vm.overcommit_ratio = 50
# 内存不足时的行为(0=启用OOM Killer)
vm.panic_on_oom = 0
四、文件系统参数调优
# 系统最大打开文件数
fs.file-max = 2097152
# 单个进程最大打开文件数(需配合 ulimit)
fs.nr_open = 2097152
# inotify 实例的最大数量
fs.inotify.max_user_instances = 8192
# 每个 inotify 实例的最大监控数
fs.inotify.max_user_watches = 524288
# AIO 最大请求数
fs.aio-max-nr = 1048576
高并发应用需要打开大量文件描述符,默认的限制往往不够用。除了 sysctl 参数,还需要修改 /etc/security/limits.conf:
cat >> /etc/security/limits.conf <<EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 65535
* hard nproc 65535
EOF
五、安全相关参数
# 禁止 IP 转发(非路由器场景)
net.ipv4.ip_forward = 0
# 忽略 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 忽略 ICMP 广播请求
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启恶意 ICMP 错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
六、完整的调优配置模板
以下是适合搬瓦工 VPS 的综合调优配置,将其写入 /etc/sysctl.d/99-bwg-tuning.conf:
cat > /etc/sysctl.d/99-bwg-tuning.conf <<'EOF'
# 网络核心参数
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.core.optmem_max = 25165824
net.core.default_qdisc = fq
# TCP 参数
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 500000
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_congestion_control = bbr
# 内存参数
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
# 文件系统
fs.file-max = 2097152
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288
# 安全参数
net.ipv4.conf.all.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
EOF
# 立即生效
sysctl --system
七、验证调优效果
调优后需要验证参数是否生效并观察性能变化:
# 验证参数是否生效
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_congestion_control
# 查看当前网络连接统计
ss -s
# 查看 TCP 连接状态分布
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn
# 监控内存使用情况
vmstat 1 5
# 查看文件描述符使用情况
cat /proc/sys/fs/file-nr
总结
Linux 内核调优是一个系统性工程,需要根据实际业务场景进行针对性调整。本文提供的参数适合大多数搬瓦工 VPS 应用场景,包括 Web 服务器、数据库和代理等常见用途。建议调优后通过 Wrk 基准测试 或 K6 负载测试 来验证实际效果。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。