翻译自 Hilltty Flags

Tartaros 建议:该 Flags 在高版本纯净服务器(1.16+)适用,较旧的版本可能不够稳定或性能无法达到文章所述说的水准。

为什么不使用 Aikar flags?

他的启动参数垃圾收集器基于 G1 算法。正如他所说,该算法非常稳定,但按照目前的标准,速度非常慢。同时,随着 JVM 的迭代,它已经非常过时了,在 JDK 8 时代,我们相信它实现的一切都是富有创新意义的,但事与愿违,我们始终要向新的技术迈进。您可能会问,为什么要改变一些现行有效的东西?嗯,为了迎接更富有机遇的未来,您应该那么做。

作者建议用 Shenandoah 取代它 - 这是一个暂停时间非常短的垃圾收集器,非常适合我们最喜欢的游戏,毕竟我们都不喜欢未响应。在整个不间断试验期间,我们相信这不会影响稳定性。至少就目前来说,没有发现一个问题。

启动参数

支持的 JDK 组件:

作者个人推荐使用 OpenJDK 16

  • OpenJDK 8+
  • Red Hat 8+
  • Amazon 11+
  • Azul 11+
  • AdoptOpenJDK 11+
  • Oracle
  • SAP

支持的服务端类型:

  • 纯净
  • Bukkit 系
  • Fabric
  • Forge

一个配置好的参数示例:

1
java -jar -server -Xms6G -Xmx6G -XX:+UseLargePages -XX:LargePageSizeInBytes=2M -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:+UseNUMA -XX:+AlwaysPreTouch -XX:-UseBiasedLocking -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 launcher-airplane.jar --nogui

警告 Option UseBiasedLocking was deprecated in version 15.0 and will likely be removed in a future release. 可以被安全地忽略,到目前为止 UseBiasedLocking 标签仍能很好地完成它的工作。

现在我们将详细的为您介绍每个标签在整体参数中承担的责任:

-Xms6G-Xmx6G:设置 Minecraft 服务器的内存使用限制,我建议服务器使用的内存不要超过12GB,并始终为系统保留1-2GB的可用内存。

-XX:+UseLargePages-XX:LargePageSizeInBytes = 2M: 允许使用大页面和批量注册内存,用以加快启动速度和服务器响应速度。让 Linux 为我们注册页面。将此行添加到 /etc/sysctl.conf:

1
vm.nr_hugepages = 3372

我们如何得到这个数字的?假设我想注册 6GB 的大页面,为此,我将 6GB 除以2。

1
6 * 1024 / 2 = 3072

接下来,我建议留出一些空闲空间,在我们的号码上增加 300。

1
3072 + 300 = 3372

然后我们重新启动系统以应用更改。您可以使用命令验证内存是否已成功注册。
grep -i hugepages /proc/meminfo.


-XX:+UnlockExperimentalVMOptions:允许使用实验性功能。

-XX:+UseShenandoahGC:将 Shenandoah 项目用作垃圾收集算法(翻译器就是这样读取这个名称的)。

-XX:ShenandoahGCMode=iu:打开我们的汇编程序的实验模式,它是 SATB 模式的镜像,这将使 标记 不那么保守,特别是在访问 弱链接 方面。


-XX:+UseNUMA:在具有多个 sockets 的主机上启用 NUMA 交错,与 AlwaysPreTouch 结合使用时,它提供了比默认开箱即用配置更好的性能。有关此体系结构的更多详细信息,请 从这里 参见详情。

-XX:+AlwaysPreTouch:一次性预注册所有分配内存,减少输入延迟。

-XX:-UseBiasedLocking:该选项是在 无限(有偏)锁定的带宽和 JVM 根据需要打开和关闭锁定的 安全点(safe point) 之间的一种折衷。对于以延迟为中心的工作负载,包括 Minecraft 服务器,禁用 有偏(biased) 阻塞是有意义的。

-XX:+DisableExplicitGC:从自定义代码调用System.gc() 会强制 ShenandoahGC 执行额外的垃圾收集周期,禁用可以防止代码滥用垃圾收集器。

服务端软件 (核心)

对于最稳定和有效的选择,作者推荐 Airplane.

系统

Tuned adm 是一个命令行工具,允许您在优化的配置文件之间切换,以提高许多特定用例中的性能。使用命令安装 apt-get

1
sudo apt-get install tuned

接下来,您需要为您的系统选择配置,我建议使用 throughput-performance 或者 latency-performance,设置所需的配置文件:

1
sudo tuned-adm profile throughput-performance

您可以验证更改是否已通过,使用命令应用 tuned-adm profile

一篇关于所有配置文件以及何时使用它们的详细文章 这里

附加配置

bukkit.yml

1
2
chunk-gc:
period-in-ticks: 600

对于 chunk-gc.period-in-ticks 推荐的值:

不要分配超过 12GB 的内存,在大多数情况下,这没有太大区别。

内存 / 玩家数 至多 30 30 - 60 60 - 100 超过 100
4 GB 400 - - -
8 GB 600 400 300 -
12 GB 1200 800 600 400