我的世界服务器优化



在我们的博客中,我们已经讨论了如何创建自己的Minecraft服务器,但是从那时起已经过去了5年,并且发生了很多变化。我们正在与您分享创建和优化这种流行游戏的服务器端的当前方法。



在过去的9年中(从发布日期算起),《我的世界》在休闲玩家和极客之间赢得了惊人的粉丝和仇恨。多维数据集世界的简单概念已经从简单的娱乐演变为用于交流和创建现实世界中各种对象的通用环境。



除了构造外,该游戏还具有创建逻辑电路的能力,使您可以在Minecraft内部实现完善的算法。YouTube上充满了令人印象深刻的视频,人们在视频上花费了大量的精力和时间来创建电子设备的副本或构建现有的虚构的建筑结构的详细副本一切仅受游戏者的幻想和游戏世界的可能性限制。





但是,我们不再进一步讨论播放器到底在创建什么,而是让我们看一下应用程序的服务器端,并强调在负载下工作期间可能出现的问题(有时非常复杂)。让我们马上预约一下,我们只会谈论Java Edition。



服务器类型



最简单的选择是内置在游戏客户端中的服务器。我们创建了一个世界,按下了一个按钮,现在服务器可以在本地网络上使用了。此选项无法承受任何严重的负载,因此我们甚至不会考虑它。



香草



Mojang Studios 在官方网站上免费将游戏的服务器部分作为Java应用程序分发这使您可以创建自己的专用服务器和个人环境,使其可用于来自世界任何地方的连接。对于那些是第一次这样做的人,相应的游戏Wiki上有一个出色的教程



这种方法有一个严重的缺点,即缺乏机会“即开即用”地连接扩展服务器功能的插件,不仅使许多过程自动化,而且还优化了性能。另外,每个连接的播放器的官方服务器都有相当大的RAM消耗。



布基特



Bukkit 服务器应用程序是由发烧友基于Vanilla版本创建的,它通过支持插件和mod(修改)大大扩展了游戏的功能。它不仅允许在游戏过程中添加新块,而且还可以执行香草软件无法访问的各种操作。有趣的是,此应用程序所需的内存明显更少。



安装Bukkit并不困难,相应的说明位于GamePedia资源上但这是没有道理的,因为自2014年以来Bukkit团队解散,项目开发人员成为Mojang Studios的雇员,并且仓库被废弃了。因此Bukkit实际上已经死了,应该注意接下来的两个项目。



SpigotMC



为了使插件开发人员的生活更轻松,需要一种API与游戏世界进行交互。这正是Spigot创造者通过以Bukkit核心为基础并对其进行重新加工以实现更高的可靠性和性能而解决的。但是,由于《数字千年版权法案》(DMCA项目的Git存储库已被锁定,并且无法从此处下载源。



目前,SpigotMC正在积极开发和使用。它支持为Bukkit构建的所有插件,但不向后兼容。为了解决《数字千年版权法案(DMCA)移除禁令》,提出了一种称为BuildTools的优雅方式。该工具消除了分发已编译应用程序的需要,并允许用户从源代码编译Spigot,CraftBukkit和Bukkit。所有这些使DMCA禁令无效。



PaperMC



一切似乎都很酷,Spigot是一个不错的选择。但是一些发烧友对这还不够,他们写下了自己的“ Spigot”叉子,“放在类固醇上”。项目页面上,主要优势指出“这太快了”。一个发达的社区可以让您快速解决新出现的问题,而扩展的API则可以使您制作有趣的插件。您可以使用文档中的一个简单命令启动PaperMC



有了PaperMC的兼容性,一切都很好,因此SpigotMC的书面插件可以在PaperMC上轻松工作,但没有官方支持。还具有与SpigotMC的向后兼容性。现在,我们已经列出了创建服务器的各种选项,让我们继续讨论可能出现的性能问题。



问题与解决方案



要了解的主要内容是,与游戏世界处理相关的所有内容都只会在物理服务器的一个计算核心上进行处理。因此,如果您突然拥有一台拥有十几个计算核心的出色服务器,那么只会加载一个。其余的几乎都将处于闲置状态。这是应用程序的体系结构,您无能为力。因此,在选择服务器时,您应该注意的不是内核数,而是时钟频率。越高,性能越好。



关于RAM数量的问题,应从以下指标着手:



  • 计划的球员人数;
  • 服务器上计划的世界数量;
  • 每个世界的大小。


请记住,Java应用程序始终需要RAM的余量。如果您要依靠8 GB的内存消耗,那么实际上您需要有12 GB。数字是相对的,但本质没有改变。



要启动服务器端,我们建议使用为Minecraft调整JVM-G1GC垃圾收集器标志文章中指定的标志这种“黑魔法”使服务器可以智能地配置垃圾收集器并优化RAM的使用。分配超过服务器在玩家高峰期间实际消耗的内存是不值得的。



生成方块图

“你真的认为月亮只有在你看时才存在吗?” (艾尔伯特爱因斯坦)
全新的服务器。玩家首次成功连接后,游戏角色就会出现在公共收集点(生成)。这是服务器预先生成游戏世界的唯一位置。同时,客户端部分会查看设置,关键参数是绘图距离。它以块为单位进行测量(映射区域为16x16,高256个块),其中指示了多少块,这恰好是服务器将请求的块数。



服务器上存储了世界的全局地图,如果在游戏角色出现时其中没有生成的块,则服务器会动态生成并存储它们。这不仅需要大量的计算资源,而且还会不断增加世界地图的大小。在最古老的无政府主义者服务器2b2t之一上(2builders2tools)地图大小已超过8 Tb,世界边界处在3000万块的标记处。与该服务器相关联的故事有数千个,因此一系列文章中应有其自己的文章。



在一个玩家周围创造世界不是问题。在数百名玩家周围创造一个世界将在短时间内导致服务器轻微制动,此后负载将减少。在吸引约一千名玩家的客户端附近,世界的生成已经能够“丢弃”服务器,并通过超时将所有客户端从服务器中丢弃。

服务器软件具有诸如TPS(每服务器的滴答声-每秒滴答声)之类的值。通常,1个时钟周期等于50 ms。(现实世界的1秒等于游戏世界的20条)。如果一个时钟的处理时间增加到60秒,则服务器应用程序将关闭,并丢弃所有播放器。
出路是将世界限制在某些坐标并执行初步块生成。因此,我们无需在游戏过程中进行动态生成,服务器只需读取现有地图即可。这两个问题都由一个WorldBorder插件处理



最简单的方法是使用一个命令以相对于生成点的圆形设置世界边界(尽管您可以将其设置为任何形状):



/wb set <  > spawn


如果玩家角色试图越过边界,他将被退回几格。如果在有限的时间内执行了几次,则入侵者将被强制传送到生成点。使用以下命令可以更轻松地预生成世界:



/wb fill


由于此操作可能会影响服务器上的播放器,因此请不要忘记确认执行:



/wb confirm


总的来说,使用英特尔®至强®金牌6240处理器花费了大约2个小时来生成一个半径为5000块(约400亿块)的世界,因此,如果您要开始生成较大的地图,请记住,此过程将花费大量时间,并且服务器的TPS将大大降低。另外,请记住,即使半径为5,000块,也将需要大约2GB的磁盘空间。



尽管该插件的极端版本​​是针对Minecraft 1.14版开发的,但通过实验发现它在后续版本中效果很好。插件论坛上提供带有说明的命令的完整列表



问题块



《我的世界》中有很多类型的方块。但是,我们希望引起读者对诸如TNT这样的障碍的关注。顾名思义,此区块是爆炸物(编辑者的注释在虚拟世界中是可播放的物品,而该物品与真正的爆炸物无关)。它的独特之处在于,在激活时,重力开始作用于它。如果此时此块开始下降,则这将强制服务器计算所有坐标。



如果有多个TNT块,则一个块的爆炸会引起爆炸,并在相邻块中包含重力,从而在所有方向上分散它们。服务器端所有这些漂亮的机制看起来像很多操作,用于计算每个块的轨迹以及与相邻块的交互。该任务非常耗费资源,每个人都可以轻松检查。生成并爆炸至少30x30x30大小的TNT方块。而且,如果您认为自己拥有一台功能强大的强大游戏计算机,那么您就大错特错了;)



/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt




使用英特尔®至强®金牌6240的服务器上的类似“实验”导致在整个块爆轰期间TPS严重“下降”,CPU上的负载达到80%。因此,如果任何播放器都可以执行此操作,则性能问题将影响服务器上的所有播放器。



更加艰难的选择是末日。但是,如果TNT顺序爆炸,那么“终结的水晶”将同时引爆,这在理论上可以完全停止服务器应用程序的运行。



只有完全禁止在游戏世界中使用这些模块,才能避免这种情况。例如,使用WorldGuard插件。请注意,如果没有其他WorldEdit插件,此插件本身将无法使用... 因此,请先安装WorldEdit,然后再安装WorldGuard。



结论



出色的游戏服务器管理并非易事。困难和降低的性能将动every等待,特别是如果您不考虑游戏玩法的本质。不可能预见一切,因为玩家有时会极富创造力,试图迫使服务器执行某些非预期的事情。风险与既定限制之间只有合理的平衡,服务器才能以连续模式工作,而不会将其性能降低到关键水平。



在隔离方面,我们的一些员工错过了他们最喜欢的办公室,因此决定在Minecraft中重新创建它们。您也有机会去拜访我们,而不必担心自己的健康和浪费时间。

minecraft.selectel.ru ( 1.15.2), - -1 -2. , .



, , «» .



All Articles