本文目录
游戏服务器是一种特殊的工作负载。比起许多慢核心,它更需要一个极快的核心;比起原始吞吐量,它更在乎缓存和内存延迟;而它的用户能感受到自己与服务器之间的每一毫秒。本文将介绍常见自建游戏服务器的关键要素、如何确定服务器规格,以及哪款 DediJet 配置适合哪种社区。
游戏服务器的瓶颈:tick 预算
大多数游戏服务器都运行着一个循环,以固定的步长推进游戏世界,每一步称为一个 tick。Minecraft 的目标是每秒 20 个 tick,因此每个 tick 有 50 ms 的预算;64 tick 的 CS2 服务器则是 1000 ÷ 64 ≈ 15.6 ms。一旦某个 tick 的耗时超出预算,服务器就会跟不上:生物卡住不动,命中判定延后,玩家管这叫“卡顿”。
这个循环的关键部分通常运行在一个主线程上。更多核心可以分担区块生成、网络通信和存档等辅助工作,还能让您在一台机器上托管更多服务器。但单个繁忙世界的运行速度,主要取决于单线程性能:主频、核心每个时钟周期完成的工作量,以及核心获取数据的速度。这正是我们的高性能型系列采用高主频 Ryzen CPU 的原因。
逐个游戏分析
| 游戏 | 首要瓶颈 | 内存压力 | 注意事项 |
|---|---|---|---|
| Minecraft Java (Paper, Purpur) | 单线程性能 | 中等;使用大型整合包时较高 | 视距、游戏过程中的区块生成 |
| Minecraft (Folia) | 核心数(玩家分散时) | 中等到较高 | 许多插件不兼容 |
| Rust | 单线程性能和内存 | 高,并在清档周期内持续增长 | 清档日玩家蜂拥而至 |
| Counter-Strike 2 | 每个繁忙实例需要一个快速核心 | 低 | 单机通常要运行大量比赛服务器 |
| ARK, Palworld, Valheim | 主频和内存 | ARK 和 Palworld 较高,Valheim 较低 | 存档庞大,内存占用随时间增长 |
| 模组服(Forge、NeoForge、Fabric) | 单线程性能 | 高 | 模组数量决定内存占用和 tick 耗时 |
Minecraft Java 版
众所周知,它的主 tick 循环是单线程的,因此高主频核心最为关键。请运行 Paper 或其分支 Purpur,而不是原版服务端:两者都尽量保持原版玩法,同时对 tick 相关的大量工作做了优化,并异步加载区块。同样出自 Paper 项目的 Folia,会把世界的不同区域放在不同线程上分别运行 tick,这对玩家分布分散的大型服务器很有帮助,代价是插件兼容性。
为 JVM 设置固定大小的堆内存,并给操作系统留出内存:
java -Xms10G -Xmx10G -jar paper.jar --nogui在此基础上,Paper 的文档还推荐了一组经过调优的垃圾回收参数,即所谓的 Aikar’s flags。对每位玩家 CPU 开销影响最大的手段,是调整 server.properties 中的 view-distance 和 simulation-distance,以及用 Chunky 等插件预先生成世界,避免在游戏过程中生成区块。Paper 的 /mspt 命令可以显示每个 tick 用掉了 50 ms 预算中的多少。至于整合包,请从整合包作者推荐的内存配置起步。
Rust
Rust 服务器既有吃重的主线程,又有大型程序生成地图和不断增多的玩家建造实体,因此主频和内存都不能少。随着基地越建越大,内存占用往往会在一个清档(wipe)周期内持续攀升;而每月一次的强制清档,又会在首日引来大批玩家。请按清档日的负载来确定规格,而不是按清档前那一周的冷清状态;如果使用 Oxide 或 Carbon 等模组框架,还要留意插件带来的负载。
Counter-Strike 2
单个 CS2 比赛服务器很轻量:内存需求不高,每位玩家的流量很小,主线程则需要一个快速核心来维持每秒 64 个 tick。社区通常会同时运行很多个。一条实用的经验法则是:每个繁忙的比赛服务器分配一个物理核心,再为操作系统留出余量。
ARK、Palworld 和 Valheim
生存沙盒游戏会把庞大的持久化世界保存在内存中,有些游戏运行得越久,内存占用就越高;常见的解决办法是每天定时重启。ARK 集群每张地图运行一个服务器进程,因此内存需求随地图数量增加。在选择操作系统之前,请先确认游戏是否提供 Linux 版服务端:Windows Server 需额外支付许可证费用,每个物理核心每月 $2.75(最少按 8 核计费)。
L3 缓存为何重要,以及要不要选 X3D
游戏模拟需要在大型数据结构之间来回跳转:实体列表、区块数据、寻路图。只要数据不在缓存中,核心就得等待主内存,耗时是缓存命中的许多倍。更大的 L3 缓存能把更多的世界数据留在核心附近,这也是部分游戏能从 AMD 的 3D V-Cache 中明显受益的原因:该技术在芯粒(chiplet)上额外堆叠了一层 L3 缓存。
我们的 Ryzen 9 7950X3D(
- Ryzen 9 9950X,最接近的替代型号:同样的
16C/32T 规格和 5.7 GHz 睿频,更新的 Zen 5 核心,64 MB L3 缓存,售价$269/月 。 - Ryzen 7 9700X:
8C/16T ,3.8–5.5 GHz ,32 MB L3 缓存集中在单个芯粒上,所有核心共享同一块缓存,售价$149/月 。
额外的缓存能带来多大帮助,取决于具体游戏甚至具体地图,而我们尚未对此做过基准测试。请把 V-Cache 视为可能的加分项,而非必需品:高主频和调校得当的服务端配置才是更稳妥的选择。
存储:用 NVMe 保存世界存档
游戏服务器会定期把世界写入磁盘:Minecraft 保存区块,Rust 和各类生存游戏定期存档。如果存档阻塞了主线程,慢速磁盘就会直接变成卡顿尖峰,而世界越大,存档也越大。NVMe 能让这些写入迅速完成。每台高性能型服务器都配备两块 NVMe 硬盘,默认组成软件 RAID 1,即使单块硬盘故障,世界存档也不会随之丢失。
RAID 不等于备份。请在服务器之外保留副本,尤其是在清档或重大更新之前;我们的备份空间附加服务支持 SFTP、rsync、BorgBackup 和 restic,起步容量 1 TB,
网络:DDoS 过滤与 ping 值
游戏服务器很容易招来 DDoS 攻击,而大部分游戏流量走的是 UDP,正是洪水攻击和放大攻击最常滥用的协议。Minecraft Java 版是个明显的例外:它基于 TCP 运行。每台 DediJet 服务器都处于全天候的网络层防护之后,能够检测 UDP、SYN、ACK 洪水攻击和放大攻击,并在上游将其过滤。我们会尽可能采用过滤,而不是对您的 IP 做黑洞路由(null route),因为那会让服务器对所有人下线。
伪装成真实玩家的攻击,例如能完成游戏登录流程的机器人洪水攻击,必须在游戏层面处理:连接限速、白名单和反机器人插件。请关闭所有不用的端口,并在启用防火墙之前先放行 SSH。下面的示例开放的是 Minecraft Java 版的默认端口,请根据您的游戏自行调整:
ufw allow 22/tcp
ufw allow 25565/tcp
ufw enable至于 ping 值,请借助延迟测试和我们的机房地点选择指南,把服务器放在大多数玩家所在的地方。Ryzen 5 7600 和 Ryzen 7 9700X 在全部 8 个机房均有提供;Ryzen 9 9950X 则在法兰克福、阿姆斯特丹、伦敦、纽约、洛杉矶和新加坡提供。
用 Pterodactyl 运行多个服务器
一台独立服务器就能撑起整个社区:Minecraft 群组服、Rust 服务器和几场 CS2 比赛可以同时运行。Pterodactyl 是一款为此而生的热门开源面板:它的 Wings 守护进程会把每个游戏服务器分别运行在各自的 Docker 容器中。
- 为每个服务器设置 CPU 限制、内存限制和磁盘配额,避免某个失控的世界拖垮其他服务器。
- 通过 CPU 绑核(CPU pinning)把最繁忙的服务器固定到专属核心上,并为操作系统和面板留出一两个核心。
- 给朋友和管理人员开通子用户权限,让他们只能访问某个服务器的控制台和文件,而不是整台机器的 root 权限。
您的社区适合哪款 DediJet 服务器
以下仅为经验法则,并非实测数据:您的模组、插件、视距和玩家习惯,比任何表格都更重要。价格为月付价格,不含增值税。
| 社区类型 | 服务器 | 规格 | 推荐理由 |
|---|---|---|---|
| 好友服或一个小型公开世界 | Ryzen 5 7600, | 高速 Zen 4 核心,内存充足,可运行一两个世界 | |
| 成长中的公开社区、整合包或几个游戏服务器 | Ryzen 7 9700X, | Zen 5 主频更高,共享同一块缓存,可容纳若干实例 | |
| 多服务器网络:大量实例、大型整合包、多款游戏 | Ryzen 9 9950X, | 我们有货服务器中睿频最高,16 个核心可供各服务器绑核,128 GB 内存 |
如果是迁移,请根据现有服务器的内存占用峰值和 tick 耗时来确定规格。如果是新开服,请为首周的玩家高峰留出余量。
后续步骤
浏览高性能型系列了解当前库存,查看我们的游戏服务器解决方案,并在首个清档日或开服之前阅读 DDoS 防护指南。然后在把地址分享给玩家之前,按照服务器安全加固指南逐项完成设置。
本文提及的服务器
- AMD Ryzen 5 7600
6C / 12T · 64 GB DDR5 · 2 × 1 TB NVMe · 1 Gbps$115/月有货部署 AMD Ryzen 5 7600 - AMD Ryzen 7 9700X
8C / 16T · 64 GB DDR5 · 2 × 1 TB NVMe · 1 Gbps$149/月有货部署 AMD Ryzen 7 9700X - AMD Ryzen 9 9950X
16C / 32T · 128 GB DDR5 · 2 × 2 TB NVMe · 1 Gbps$269/月有货部署 AMD Ryzen 9 9950X