请前往 模块插件 激活 UI Manage 然后刷新
旋律工艺云计算

技术支持

  1. 门户首页
  2. 帮助中心
  3. 我的世界服务端相关说明
  4. 调优您的Java版服务器启动参数,同样配置更加流畅
用户登录
帮助中心

调优您的Java版服务器启动参数,同样配置更加流畅

本文来源:aikar团队 aikar团队是Paper的开发团队 Paper是全球最受欢迎的MC Java版服务端 内容绝对权威可靠

原文链接:https://aikar.co/mcflags.html

介绍

在对 JVM、标志和各种组合进行了数周的研究后,aikar.为 Minecraft 设计了一组经过高度优化的垃圾收集标志。我在我的服务器上测试了这些,并且已经使用了多年。然后我向公众宣布了我的研究,直到今天,许多服务器多年来一直在使用我的标志建议,并报告垃圾收集行为有了很大的改进。

这些标志是大量努力的结果,也是在各种服务器大小、插件列表和服务器类型的生产环境中看到的结果。他们已经一再证明了自己。

我强烈建议使用这些标志来启动您的服务器。这些标志有助于保持服务器运行一致,而不会出现任何大的垃圾收集峰值。CPU 可能会稍高一些,但你的服务器总体上会更可靠、更稳定的 TPS。

 

Paper开发团队推荐的 启动参数 – MC 1.15 (Java 8+, MC 1.8+) 更新

只需要完全照抄下面的启动参数即可,仅更改 Xmx 和 Xms。 既最大内存 最小内存 最好是一样的!

 

必读: 设置最大内存和最小内存的时候必须注意 不要将所有内存用于mc 保留一些给系统!

 
设置 Xms 和 Xmx 值时,如果您的服务器配置有8G,请不要设置为8G!Minecraft(和 Java)在 Xmx 参数之上需要额外的内存。建议将您的 Xmx/Xms 减少大约1~1.5G以避免内存不足或“OOMKiller”攻击您的服务器。这也为操作系统留出了使用内存的空间。
 

启动参数的详细技术解释:

  1. -Xms 与 -Xmx 相匹配 - 为什么:如果最大内存/最小内存不一致 JVM不会在一开始就占用内存 这带来了两个问题 1.JVM虚拟机需要频繁的取消占用或者占用内存 耗费更多的CPU资源 2.最小内存小于最大内存时 可以使您在内存不足的时候启动服务端 这样一旦内存告急 服务端将产生灾难性崩溃。
  2. UnlockExperimentalVMOptions  下面的选项的前置参数
  3. G1NewSizePercent:这些是重要的。在 CMS 和其他 Generations 中,调整 New Generation 会导致 FIXED SIZE New Gen 并且通常通过使用 -Xmn 的显式大小设置来完成。使用 G1,情况会更好!您现在可以为新一代指定总体所需范围的百分比。通过这些设置,我们告诉 G1 不要将其默认的 5% 用于新一代,而是给它 40%!Minecraft 具有极高的内存分配率,在 30 名玩家服务器上至少每秒 800 兆字节!这主要是短暂的物体(块位置)

    现在,这意味着 MC 真的需要更多地关注新一代才能支持这种分配率。如果你的新生代太小,你将每秒运行新生代收集1-2次以上,这真的很糟糕。你会有很多暂停,TPS有遭受痛苦的风险,服务器将无法保持增加 GC 的成本。然后结合对象现在提升更快的事实,导致您的旧代增长更快。给定更多的 NewGen,我们能够减慢 Young Gen 收集的间隔,从而使短寿命的对象有更多的时间在年轻时死去,并且整体上更有效的 GC 行为。

  4. G1MixedGCLiveThresholdPercent:控制何时在年轻 GC 集合中包含混合 GC 中的区域,在不进行正常的老年代 GC 收集的情况下保持老年代的整洁。当你的内存低于这个百分比时,老一代甚至不会被包含在“混合”集合中。混合不像一个完整的旧集合那么重,因此对旧集合进行小的增量清理可以保持内存使用量较少。
    默认值为 65 到 85,具体取决于 Java 版本,我们设置为 90 以确保我们尽可能快地回收旧代中的垃圾,以保留尽可能多的空闲区域。我的旧标志设置为 35,这是一个错误。我倒置了这个标志的意图,因为我认为 35 是 65 所做的。这个数字不应该使用 35。
  5. G1ReservePercent=20:最新版本中的 MC 内存分配率真的很疯狂。我们冒着可怕的“空间耗尽”的风险,没有足够的可用内存来移动数据。这可确保有更多内存等待用于此操作。默认是 10,所以我们再给它 10。
  6. MaxTenuringThreshold=1 : Minecraft 的内存分配率非常高。在那个记忆中,大部分是在伊甸园一代中回收的。但是瞬态数据会溢出到幸存者中。最初完全删除 Survivor 并取得了不错的结果,但确实导致瞬态数据进入旧代,这并不好。Max Tenuring 1 确保我们不会将瞬态数据提升到老年代,但任何在 2 次垃圾传递中幸存下来的数据收藏只是被假定为寿命更长。
    这样做大大减少了年轻集合中的暂停时间,因为在 Survivor 空间中为一个终身对象复制数据多达 15 次,实际上对于实际旧内存来说确实需要大量时间。理想情况下,GC 引擎会跟踪对象的平均年龄并更快地使用数据,但这不是它的工作原理。
    考虑到每个年轻收集的平均 GC 率是 10 秒到分钟以上,这不会导致任何“垃圾”被提升,并且只会延迟在混合 GC 中收集的寿命更长的内存。
  7. SurvivorRatio=32:因为我们大幅降低了 MaxTenuringThreshold,我们将大幅减少幸存者空间的使用。这释放了更多区域供 Eden 使用。
  8. AlwaysPreTouch:AlwaysPreTouch 在进程启动时获取内存设置和保留,确保它是连续的,从而进一步提高了它的效率。这提高了操作系统内存访问速度。强制使用透明大页面
  9. +DisableExplicitGC:许多插件认为他们知道如何控制内存,并尝试调用垃圾回收。执行此操作的插件会触发完整的垃圾收集,从而引发巨大的延迟峰值。此标志禁止插件尝试执行此操作,从而保护您免受其不良代码的影响。
  10. MaxGCPauseMillis=200:此设置控制在为您的新一代指定的最小和最大范围之间使用多少内存。这是您希望服务器暂停收集多长时间的“目标”。200 的目标是最多损失 4 个刻度。这将导致短暂的 TPS 下降,但是服务器可以立即弥补这一下降,这意味着它不会对您的 TPS 产生有意义的影响。200 毫秒低于玩家可以识别的时间。在测试中,将此值限制为更低的数字会导致 G1 无法足够快地重新收集内存,并且可能会用完旧代,从而触发完整收集。仅仅因为这个数字是 200 并不意味着每个集合都是 200。这意味着如果它真的需要它最多可以使用 200 个,我们需要在有内存要收集时让它完成它的工作。
  11. +ParallelRefProcEnabled : 优化 GC 进程以使用多个线程进行弱引用检查。 人话:多核内存回收
  12. G1RSetUpdatingPauseTimePercent=5:默认为暂停更新 Rset 期间花费的时间的 10%,将其减少到 5% 以使其更多并发以减少暂停持续时间。
  13. G1MixedGCCountTarget=4:默认为 8。因为我们的目标是收集速度较慢,使用较少的 old gen,请尝试更快地回收 old gen 内存以避免耗尽 old。
  14. G1HeapRegionSize=8M+:默认是自动计算的。对 Minecraft 来说超级重要,尤其是 1.15,因为在内存不足的情况下,默认计算在大多数情况下都会太低。任何一半这个大小(4MB)的内存分配都将被视为“巨大”并直接提升到老年代并且更难释放。如果您允许 java 使用默认值,您将被销毁,大量内存被视为 Humongous。
  15. +PerfDisableSharedMem:导致 GC 写入文件系统,如果磁盘 IO 很高,这可能会导致严重延迟 - 请参阅https://www.evanjones.ca/jvm-mmap-pause.html
 
  • 2 用户发现这个很有用
此文章对您是否有帮助?

推荐您也看看这些

我的世界常见指令集合

注意: 部分指令需要装插件才有 并不是所有服务器都有 请不要因为部分指令无法使用联系客服 注意:[ ]表示输入的内容类型,但输入时请不要带着[ ]在后台打指令的时候不需要打 /,...

MC server.properties文件详解

官方WIKI说明地址:https://minecraft-zh.gamepedia.com/Server.properties 注:这里true为开启,false为关闭 #Minecraft...