众所周知,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。