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 访问官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。