同样的机器,别人跑游戏服不卡、你跑就飘;别人的机器能扛住高并发,你的一上量就丢包。差别 often 藏在 /etc/sysctl.conf 里。
这篇讲 sysctl 内核参数调优:哪些参数值得调、调到多少、怎么持久化、怎么验证。针对游戏服务器和高并发 Web 两个场景给了成套参数。
需要云服务器可以看看财富云计算:NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,一键开服面板,主流游戏快速部署。
一、sysctl 是什么
内核参数是 Linux 内核运行时的行为开关:TCP 缓冲区多大、能开多少连接、内存怎么回收、端口范围……全部可调。
# 查看单个参数
sysctl net.core.somaxconn
# 查看所有(几千个)
sysctl -a
# 临时修改(重启失效)
sysctl -w net.core.somaxconn=1024
# 从配置文件加载(永久生效)
sysctl -p /etc/sysctl.d/99-custom.conf注意:容器内(Docker)修改 sysctl 受限,部分参数只在宿主机生效。云服务器(KVM 虚拟化)大部分网络参数可调,少数和虚拟化相关的由宿主控制。
二、游戏服务器调优参数
游戏服的特点是:UDP 流量大、连接数中等、对延迟敏感。
# /etc/sysctl.d/99-gameserver.conf
# ===== 网络缓冲区(关键) =====
# UDP 接收缓冲区(游戏协议走 UDP,默认太小会丢包)
net.core.rmem_default = 262144
net.core.rmem_max = 8388608
net.core.wmem_default = 262144
net.core.wmem_max = 8388608
# TCP 自动调优范围
net.ipv4.tcp_rmem = 4096 262144 8388608
net.ipv4.tcp_wmem = 4096 262144 8388608
# ===== 连接队列(防高并发丢连接) =====
# 内核连接队列上限
net.core.somaxconn = 8192
# 半连接队列(SYN 攻击防护相关)
net.ipv4.tcp_max_syn_backlog = 8192
# ===== 端口范围(大量出站连接时用) =====
net.ipv4.ip_local_port_range = 10000 65000
# ===== TIME_WAIT 复用(游戏服频繁重连时) =====
net.ipv4.tcp_tw_reuse = 1
# tcp_tw_recycle 在新内核已移除,别用了
# ===== 降低延迟 =====
# 减少 SYN 重传次数(内网/低延迟场景)
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
# TCP 连接超时
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
# ===== 防洪水/扫描 =====
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
# ===== 内存 =====
# 尽量用物理内存,少 swap(游戏服卡顿的主因之一)
vm.swappiness = 10
# 脏页回写策略
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
# 内存水位线
vm.watermark_scale_factor = 50
# 允许 overcommit(游戏服内存申请比较激进)
vm.overcommit_memory = 1
vm.overcommit_ratio = 50
# ===== 文件句柄 =====
fs.file-max = 1048576
fs.nr_open = 1048576
# ===== 队列调度(低延迟) =====
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr重点解释三个:
tcp_congestion_control = bbr:Google 出的拥塞控制算法,比默认的 cubic 在弱网/高延迟链路上快得多。游戏服、跨国访问提升明显。先确认内核支持:
sysctl net.ipv4.tcp_available_congestion_control
# 输出里有 bbr 才能用(内核 4.9+ 自带,主流云系统都支持)vm.swappiness = 10:游戏最怕卡顿,swap 换页会引入几十毫秒的延迟。设 10 让系统尽量用物理内存。前提是内存别太紧张,详见Swap 分区与内存优化。
rmem_max = 8388608(8M):UDP 大流量时默认缓冲区(约 200KB)会丢包。调到 8M,游戏数据传输更稳。
三、高并发 Web 服务器参数
Web 服务的特点是:TCP 连接多(短连接为主)、文件句柄吃紧、内存给缓存。
# /etc/sysctl.d/99-webserver.conf
# ===== 文件句柄(Web 服务器头号瓶颈) =====
fs.file-max = 2097152
fs.nr_open = 2097152
# inotify(文件监控)
fs.inotify.max_user_watches = 524288
# ===== TCP 连接 =====
# 监听队列(必须和 nginx 的 backlog 配合)
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# TIME_WAIT 快速回收复用(高并发短连接关键)
net.ipv4.tcp_tw_reuse = 1
# 注意: tcp_tw_recycle 已废弃, NAT 环境下会出问题,别用
# 连接跟踪(有防火墙/NAT 时关键,默认值太小会丢包)
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30
net.netfilter.nf_conntrack_tcp_timeout_established = 600
# ===== 缓冲区 =====
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# ===== 性能 =====
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
# ===== 安全基线 =====
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.log_martians = 1
# ===== 内存(Web 服务) =====
vm.swappiness = 30
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
# ===== 进程/线程 =====
kernel.pid_max = 4194304
kernel.threads-max = 4194304Web 场景最容易踩的坑:nf_conntrack_max。默认 65536,高并发下连接跟踪表满,dmesg 报 nf_conntrack: table full, dropping packet,表现是随机丢包、连接超时。调大能解决。
四、怎么调:方法论
别照抄网上「终极优化参数」,按这个流程来:
1. 先测量
# 看当前值
sysctl net.core.somaxconn
# 看有没有相关报错
dmesg | grep -iE "drop|full|overflow|conntrack"
# 看瓶颈在哪(结合监控)
# - CPU 高 → 不是 sysctl 问题,查应用
# - 内存高 → 调 vm.* 参数
# - 丢包/延迟 → 调网络参数
# - 连接失败 → 调队列和句柄2. 一次只改一类
网络、内存、文件系统分开调,改完全类重启服务验证效果,再改下一类。一次改 50 个参数,出了问题不知道是谁的锅。
3. 备份原值
# 导出当前所有参数
sysctl -a > /root/sysctl-backup-$(date +%F).conf
# 出问题恢复
sysctl -p /root/sysctl-backup-2026-10-13.conf4. 验证生效
# 加载配置
sysctl -p /etc/sysctl.d/99-gameserver.conf
# 确认加载
sysctl net.ipv4.tcp_congestion_control
# 重启后依然生效?
reboot
sysctl net.core.somaxconn配置文件加载顺序:/etc/sysctl.d/ 下的文件按文件名字典序加载,后者覆盖前者。用 99- 前缀保证你的配置最后加载,覆盖系统默认。
五、参数速查表
| 参数 | 默认 | 游戏服 | Web 高并发 | 说明 |
|---|---|---|---|---|
net.core.somaxconn | 4096 | 8192 | 65535 | 监听队列上限 |
net.ipv4.tcp_max_syn_backlog | 1024 | 8192 | 65535 | 半连接队列 |
net.core.rmem_max | 212992 | 8M | 16M | 接收缓冲区 |
net.core.wmem_max | 212992 | 8M | 16M | 发送缓冲区 |
vm.swappiness | 60 | 10 | 30 | swap 倾向 |
fs.file-max | 8192 | 1M | 2M | 文件句柄上限 |
net.ipv4.tcp_tw_reuse | 0 | 1 | 1 | TIME_WAIT 复用 |
net.netfilter.nf_conntrack_max | 65536 | 默认 | 1M | 连接跟踪表 |
net.ipv4.tcp_congestion_control | cubic | bbr | bbr | 拥塞算法 |
vm.overcommit_memory | 0 | 1 | 0 | 内存超售策略 |
六、常见问题
Q:sysctl -p 报 permission denied 或 read-only?
容器内或只读文件系统。Docker 容器要用 --sysctl 启动参数;只读 rootfs 要挂载 writable 层。
Q:改了参数没生效?
三个原因:配置文件放错位置(要放 /etc/sysctl.d/ 或 /etc/sysctl.conf,且没被别的文件覆盖)、没执行 sysctl -p、参数名在新内核已废弃(查 sysctl -a | grep 参数名)。
Q:BBR 为什么没有效果?
内核不支持(老内核)、或者 default_qdisc 不是 fq(BBR 依赖 fq 调度)、或者瓶颈根本不在网络(是 CPU/磁盘/应用问题)。
Q:调大了缓冲区,内存占用飙升?rmem_max 是上限不是预分配,实际用多少看流量。但如果确实内存紧张,回调一些。缓冲区不是越大越好。
Q:改错了机器起不来/网络不通?
控制台 VNC 进去,sysctl -p /root/sysctl-backup-xxx.conf 恢复。这就是为什么必须提前备份参数值。
Q:NAT 型服务器有什么特别注意的?
NAT 机型的流量经过服务商网关,网关的 NAT 表和会话数由服务商控制,你的内核参数管不到网关段。所以调 nf_conntrack_max 对 NAT 映射端口的效果有限——但本地进程的连接仍然受你的内核参数管,该调还是调。
七、直接可用的部署流程
# 1. 备份现有参数
sysctl -a > /root/sysctl-before.conf
# 2. 写配置(按场景选游戏服或 Web 版)
cat > /etc/sysctl.d/99-tuning.conf <<'EOF'
# 你的参数...
EOF
# 3. 加载
sysctl -p /etc/sysctl.d/99-tuning.conf
# 4. 抽查生效
sysctl net.core.somaxconn net.ipv4.tcp_congestion_control vm.swappiness
# 5. 观察 24 小时(监控 CPU/内存/丢包)
# 6. 确认稳定后,重启验证持久化
reboot小结
内核调优记住三点:先测量再调、一次改一类、必须备份原值。游戏服重点调网络缓冲区和 swappiness,Web 服务重点调句柄和连接跟踪表。BBR + fq 是性价比最高的一项,几乎所有场景都值得开。
更多运维教程见财富云计算知识库:网络排查工具、Swap 优化、systemd 服务、监控体系全系列。需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]sysctl -p /etc/sysctl.d/99-redis.conf更多内核调优见内核参数优化 sysctl。三、AOF 日志配置开启 AOF# /etc/redis/redis.conf[...]
2026-10-13 回复
[...]sudo sysctl -p /etc/sysctl.d/99-palworld.confUDP 缓冲区调大对游戏服收益明显,更多参数见内核参数优化 sysctl 调优。2.3 定时重启(最有效的保命手段)内存泄漏扛不住就规律重启,选在凌晨人少时:# 每天凌晨 4 点重启,提前广播[...]
2026-10-15 回复
[...]每次开新服都要重来一遍:装依赖、建用户、配 Swap、设防火墙、装 SteamCMD、配 systemd……同样的步骤抄十遍,总有一次抄错。这篇把这些固化成一套一键环境脚本:新机器跑一遍,十分钟后就是一个随时可以装任何游戏的标准开服环境。本文基于 财富云计算 NAT 型云服务器(无独立公网 IP、价格比独立 IP 机型省一半以上)的 Ubuntu 22.04 环境编写。脚本可直接抄走,按注释改几个[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复