PaperMC 优化:提升 Minecraft 服务器性能的关键
Minecraft 是一款深受全球玩家喜爱的沙盒游戏,而搭建自己的服务器则能带来独特的社区体验。然而,随着玩家数量的增加和游戏内容的丰富,服务器性能问题常常成为运营者的痛点。PaperMC 作为 Spigot 和 Bukkit 的高性能分支,通过一系列优化和修复,成为了提升 Minecraft 服务器性能的首选。本文将详细探讨如何通过 PaperMC 优化来显著改善你的 Minecraft 服务器表现。
1. 理解 PaperMC 的优势
PaperMC 在 Spigot 和 Bukkit 的基础上进行了大量的底层代码优化,包括但不限于:
* 异步处理:将部分任务从主线程分离,减少主线程负载。
* 更高效的算法:优化了方块更新、实体移动、红石计算等诸多游戏机制。
* 错误修复和稳定性提升:修复了原版和 Spigot 中的许多性能瓶颈和 Bug。
* 丰富的配置选项:通过 paper.yml、spigot.yml 和 bukkit.yml 提供了细致的优化控制。
2. 基础环境优化
在深入 PaperMC 配置之前,确保你的服务器基础环境已打好坚实基础。
2.1 Java 版本与启动参数
- Java 版本:始终使用最新版本的 Java LTS (长期支持) 版本,例如 Java 17 或 Java 21。它们带来了显著的性能改进和垃圾回收优化。
- Aikar’s Flags (Aikar 的启动参数):这是 PaperMC 社区推荐的 Java 虚拟机 (JVM) 启动参数,旨在优化垃圾回收,减少卡顿。
bash
java -Xms<最小内存>G -Xmx<最大内存>G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=<CPU核心数> -XX:ConcGCThreads=<CPU核心数> -XX:InitiatingHeapOccupancyPercent=35 -XX:+AlwaysPreTouch -XX:ParallelRefProcEnabled -Dusing.aikars.flags=https://aikar.co/mcflags.html -jar paper.jar --nogui
请根据你的服务器内存和 CPU 核心数调整<最小内存>、<最大内存>和<CPU核心数>。通常<最小内存>和<最大内存>设置为相同值,以避免运行时调整堆大小带来的开销。
2.2 操作系统优化 (Linux 为例)
- 禁用 Swap:如果服务器内存充足,禁用 Swap 可以避免内存数据交换到磁盘,从而减少 I/O 延迟。
bash
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab - CPU 调度器:确保使用高性能的 CPU 调度器,例如
performance模式。
bash
sudo apt install cpufrequtils
sudo cpufreq-set -g performance - 文件系统:使用现代文件系统如 Ext4 或 XFS,并确保其优化。
3. PaperMC 核心配置文件优化 (paper.yml, spigot.yml, bukkit.yml)
这是性能优化的重中之重。这些文件提供了大量的可配置项来调整游戏机制。
3.1 spigot.yml
view-distance&simulation-distance:这是对性能影响最大的两个设置。view-distance:玩家能看到的区块数量。降低此值可显著减少服务器渲染和发送给客户端的数据量。推荐值:7-10。simulation-distance:模拟区块的距离,影响作物生长、红石、实体 AI 等。推荐值:4-6。- 重要:
simulation-distance不应高于view-distance。
max-tick-time:限制了实体、瓷砖实体和方块更新的最大时间。过高的值可能导致卡顿,过低则可能导致游戏机制延迟。通常默认值即可,除非遇到特定实体或方块更新造成的卡顿。entity: 50tile: 50max-entity-collisions: 8:降低实体碰撞检测的数量,减少计算。
nerf-spawner-mobs: true:减少刷怪笼生成的怪物 AI 消耗,它们通常不需要复杂的 AI。
3.2 bukkit.yml
这个文件相对简单,主要用于控制全局设置。
* spawn-limits:调整怪物、动物等实体的生成上限。
* monsters: 70 (默认)
* animals: 10
* water-animals: 5
* water-ambient: 5
* ambient: 1
适当降低可以减少实体数量,从而降低服务器负载。
* ticks-per-spawn:调整刷怪频率。
* monster: 400
* animal: 400
* water-animal: 400
* water-ambient: 400
* ambient: 400
增加这些值可以减慢刷怪速度。
3.3 paper.yml
PaperMC 提供了最丰富的优化选项。
alt-item-despawn-age: 6000&container-item-drop-despawn-rate: 1.0:- 加速掉落物消失。
alt-item-despawn-age设置物品消失时间 (ticks),container-item-drop-despawn-rate可以让容器掉落的物品更快消失。
- 加速掉落物消失。
max-auto-save-chunks-per-tick: 24:- 限制每 Tick 自动保存的区块数量。适当降低可以平滑保存操作,避免瞬间卡顿。
anti-xray:enabled: trueengine-mode: 2(隐藏模式,性能开销稍大但效果最好) 或1(替代模式,性能开销小但效果一般)hidden-blocks&replacement-blocks:根据需要配置,隐藏矿物并用替代方块填充。注意,过度使用 Anti-Xray 会带来一定的性能开销。
despawn-ranges:soft: 32hard: 128- 设置实体软硬性消失距离,降低可以更快清理远处的实体。
entity-tracking-range:- 调整不同类型实体被追踪的距离。降低这些值可以减少服务器追踪和向客户端发送实体更新的频率。
max-entity-cramming: 24:- 实体挤压伤害阈值。原版是 24。可以适当降低。
mob-spawner-tick-rate: 1:- 刷怪笼的刷新频率。默认是 1,可以适当提高 (例如 2-4) 来降低刷怪笼的压力。
redstone-implementation: MODERN:- PaperMC 提供了更高效的红石计算模式。确保使用
MODERN或ALTERNATE。
- PaperMC 提供了更高效的红石计算模式。确保使用
hopper.disable-move-event: true:- 如果不需要插件监听漏斗的物品移动事件,禁用它可以提升漏斗性能。
hopper.alt-tps-tag-entity-collisions: false- 通常保持为
false,除非遇到特定问题。
- 通常保持为
tick-rates.villager-trade-cooldown: 20&tick-rates.villager-unlimited-trades: true:- 减少村民交易冷却时间检查频率并允许无限交易,这对服务器压力有帮助。
max-hopper-minecart-transfer: 8:- 漏斗矿车每次转移物品的数量,降低可以减少单次操作的开销。
seed-village/seed-desert/seed-igloo等:- 禁用一些不常用的结构生成,可以略微加快世界生成速度。
4. 插件管理与选择
插件是服务器功能的基石,但也是性能杀手。
- 选择高效插件:优先选择经过优化、社区活跃且为 PaperMC 设计的插件。阅读插件文档和用户反馈,避免使用已知有性能问题的插件。
- 使用性能分析工具:使用 Spark 或 PaperMC 内置的
/timings命令来分析服务器性能。它们可以精确地指出是哪个插件或哪个游戏机制造成了最高的 CPU 或 Tick 消耗。 - 最小化插件数量:只安装你真正需要的插件。每个插件都会增加一些开销。
- 配置插件:许多插件自身也提供了性能优化选项,务必仔细阅读并配置。例如,一些领地插件允许你限制加载的区块数量或禁用不必要的保护功能。
5. 世界管理
优化世界可以显著提升性能,尤其是在大型或老旧的世界中。
- 预生成区块:使用如 Chunky 等插件预生成世界区块。这可以避免玩家探索新区域时,服务器因实时生成区块而产生大量卡顿。
- 设置世界边界:使用
/worldborder命令或插件设置一个合理的世界边界。这能限制玩家探索的范围,从而控制世界文件的大小和加载的区块数量。 - 定期清理区块:对于无人访问的旧区块,可以考虑使用如 WorldEdit 等工具或专门的清理插件进行删除。
- 实体清理:使用插件如 ClearLagg 定期清理掉落物、多余的怪物和动物,但要小心配置,避免误伤玩家的宠物或农场。
6. 硬件考量
即便软件优化再好,硬件瓶颈也无法突破。
- CPU (中央处理器):Minecraft 服务器是单线程性能密集型应用。选择具有高单核睿频的 CPU 比拥有大量核心但单核性能低的 CPU 更重要。例如,Intel Core i7/i9 或 AMD Ryzen 7/9 系列。
- RAM (内存):为服务器分配足够的内存,但不要过度。通常,对于 10-20 人的小型服务器,6-8GB 内存可能足够。对于大型服务器,16GB 或更多是必要的。过度分配内存会导致 Java 垃圾回收器工作量增加,反而可能造成卡顿。
- 存储 (硬盘):使用 NVMe SSD 是最佳选择。读写速度对世界加载、区块保存和插件数据处理至关重要。传统的 HDD 或 SATA SSD 在性能上会逊色许多。
- 网络:确保你的服务器拥有稳定的网络连接和大带宽,以应对玩家连接和数据传输。
7. 性能监控与分析
持续监控是优化过程不可或缺的一部分。
- Timings V2 (PaperMC 内置):在控制台输入
/timings paste,等待一段时间后会生成一个链接。打开链接可以直观地看到服务器各个部分的 Tick 消耗,包括插件、实体、方块等。这是诊断性能问题的黄金标准。 - Spark:一个功能强大的性能分析器,可以通过网页界面提供更实时、更详细的 CPU、内存、TPS 和 Tick 消耗报告。使用
/spark profiler start和/spark profiler stop来生成报告。 - TPS (Ticks Per Second) 监控:使用
/tps命令或相关插件实时查看服务器的 TPS。理想情况下,TPS 应保持在 20。任何低于 20 的值都意味着服务器正在卡顿。
总结
PaperMC 为 Minecraft 服务器提供了强大的性能优化潜力。通过结合基础环境优化、精细的配置文件调整、明智的插件选择与管理、合理的世界规划以及适宜的硬件配置,并辅以持续的性能监控,你可以显著提升服务器的流畅度和稳定性,为玩家带来卓越的游戏体验。请记住,优化是一个持续的过程,没有一劳永逸的解决方案,定期检查和调整配置是保持服务器最佳状态的关键。