众所周知,Bugjump 在 MC 高版本下的优化稀烂,如此辣鸡的优化对于想要开服但手头上却只有 1c2g 或是 2c4g 渣机的服主来说是一个非常大的负担。
对于 spigot,paper 等非原版端的优化 MCBBS 上已经有非常多的帖子,优化的方式基本上可以分为三类:
- 修改 bukkit.yml、spigot.yml 和 paper.yml 等配置
- 增加区块卸载和清理掉落物等优化插件
- 修改 Java 启动参数和 Java 版本
但实际上,修改配置文件产生的效果并不明显,且过分的修改参数会对游戏体验产生影响。而有关区块卸载、清理掉落物、生物限制等优化插件在高版本下可以说是几乎没有。
Java 启动参数其实对于服务器来说非常重要,但网络上对于启动参数网上的说法众说纷纭。本人会在未来对不同的参数进行测试,敬请期待。
本文通过三个测试来粗略地探究一下 Java8 和 Java11 下 Hotspot 和 Openj9 虚拟机对于 Minecraft 高版本服务端 spigot 端的性能影响
本次测试采用的 Minecraft 版本为 1.16.5,所以并不支持 Java17
Spigot 版本为 3096a-Spigot-9fb885e-af1a232
Java 启动参数采用最简单的设置方式,仅仅设置初始堆和最大堆的大小
1 | java -Xmx2G -Xms1G -jar spigot-1.16.5.jar nogui |
Java 选用以下四个版本:
- Openj9 jre8
1 | openjdk version "1.8.0_322" |
- Hotspot jre8
1 | openjdk version "1.8.0_312" |
- Openj9 jre11
1 | openjdk version "11.0.10" 2021-01-19 |
- Hotspot jre11
1 | openjdk version "11.0.15" 2022-04-19 |
地图种子:1145141919810
开服系统:Ubuntu20.04
服务器配置:腾讯云 2c4g6m
测试分为三个部分:无插件开服测试,跑图测试和多插件开服测试
无插件开服测试
说是无插件实际上还是存在一个插件:EssentialsX-2.19.0,该插件仅仅用于运行/gc 命令获得 tps 和 Allocated memory
测试方法:在存档已经生成后使用四个不同的 Java 版本启动 mc 服务器,使用腾讯云监控面板获得 CPU 和内存占用情况,同时使用/gc 命令获得 tps 和游戏内 Allocated memory
在测试的过程中不运行其他程序,此时腾讯云监控面板的数据可以近似为 mc 服务器独占
CPU 占用率
非常明显,Hotspot 相比于 Openj9 来说 CPU 占用率更低,这也反应在了开服时间上:Hotspot 开服均在 30-40s 左右,而 Openj9 开服时间均在 60s 以上。
横向对比 Java8 和 Java11,在虚拟机相同的情况下两者差距并不明显,但还是可以看出 11 比 8 占用率要高一些。
内存占用
非常明显,Openj9 在内存上完爆 Hotspot,这也符合 Openj9 的定位:以牺牲一部分性能的前提下极大降低内存占用率。
此外相同虚拟机下 11 内存占用率要比 8 要高出许多。
TPS
对于 TPS,四个不同版本均在开服初期发生了明显的下降,但都能以几乎相同的速度恢复。
Allocated memory
该数据来源于/gc 指令之中,个人感觉该参数还是比较迷的,仅供参考。
跑图测试
测试方法:在开服 5 分钟后首先连续跑图 2 分钟(约 2600 格,创造飞行),接着挂机 13 分钟
每次飞行方向均相同,测试完成后会将存档重置保证每次测试都会重新生成地形
内存占用
Openj9 jre11 在这里发生了意外,在跑图 1 分钟时内存极速飙升,CPU 也到了 100%,服务器后台提示 overload,个人认为这只是个别现象,但这也说明了 Openj9 可能出现的不稳定情况。
跑图时的内存和静态测试唯一不同的是 Hotspot jre8,在跑图完成后内存仍然上升,但到了 2000M 后触发了内存回收,内存下降至 1680M 以下,这甚至比开服初期的内存还要低。经过反复测试后确认了该现象并不是偶然。
CPU 占用率
无明显区别。
多插件开服测试
测试方法:和无插件开服测试相同
使用插件列表:
- AdvancedNMotd-9.2.0
- Boom-1.3.3
- EastLandLog4jFixer-1.0.4
- EssentialsX-2.19.0-dev+52-7245e84
- EssentialsXChat-2.19.0-dev+52-7245e84
- EssentialsXSpawn-2.19.0-dev+52-7245e84
- HolographicDisplays-2.4.5
- HolographicPlaceholders-2.1.2 Stable
- LimitPillagers-3.0.1
- MiaoBoard-2.6.0
- MySkin-3.3
- NekoMaid-0.2.5
- PlaceholderAPI-2.10.9
- PlugManX-2.2.9
- ProtocolLib-4.5.1
- spark-1.9.23
- Uniporter-1.3.3
- Vault-1.7.3
- VillagerOptimiser-1.1.5
使用存档为本人服务器存档,大小约 3G,含多个强加载区块
CPU 占用率
Openj9 jre11 表现不佳,其余占用率相近。
内存占用
和无插件开服测试结果相同,Openj9 的内存依然非常低。
TPS
四个版本 TPS 均会下降,但由于 Hotspot 启动速度约是 Openj9 两倍,所以 TPS 下降时间点也略微提前。
总结
Openj9 相比于 Hotspot 性能会有略微的损失,具体表现为开服速度慢约两倍,CPU 占用率会更高。但由此带来的是内存的大量降低。如果在 TPS 上并没有过大的压力但是内存紧俏的情况下建议还是 采用 Openj9 的虚拟机。
对于 1.16 版本的 Minecraft,如果没有插件的特殊要求,建议使用 java8 而非 java11。
Leave a comment