如果图表没有成功加载,请刷新页面!
众所周知,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 启动参数采用最简单的设置方式,仅仅设置初始堆和最大堆的大小
java -Xmx2G -Xms1G -jar spigot-1.16.5.jar nogui |
Java 选用以下四个版本:
- Openj9 jre8
openjdk version "1.8.0_322" | |
IBM Semeru Runtime Open Edition (build 1.8.0_322-b06) | |
Eclipse OpenJ9 VM (build openj9-0.30.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20220128_306 (JIT enabled, AOT enabled) | |
OpenJ9 - 9dccbe076 | |
OMR - dac962a28 | |
JCL - c1d9a7af7c based on jdk8u322-b06) |
- Hotspot jre8
openjdk version "1.8.0_312" | |
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07) | |
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode) |
- Openj9 jre11
openjdk version "11.0.10" 2021-01-19 | |
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9) | |
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.24.0, JRE 11 Linux amd64-64-Bit 20210120_821 (JIT enabled, AOT enabled) | |
OpenJ9 - 345e1b09e | |
OMR - 741e94ea8 | |
JCL - 0a86953833 based on jdk-11.0.10+9 |
- Hotspot jre11
openjdk version "11.0.15" 2022-04-19 | |
OpenJDK Runtime Environment Temurin-11.0.15+10 (build 11.0.15+10) | |
OpenJDK 64-Bit Server VM Temurin-11.0.15+10 (build 11.0.15+10, mixed mode |
地图种子: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。