Minecraftサヌバヌの最適化



私たちのブログでは、独自のMinecraftサヌバヌを䜜成する方法に぀いお既に説明したしたが、それから5幎が経過し、倚くのこずが倉曎されたした。このような人気のあるゲヌムのサヌバヌ偎を䜜成しお最適化するための珟圚の方法を玹介したす。



リリヌス日から数えお9幎の歎史の䞭で、Minecraftはカゞュアルプレヌダヌずオタクの䞡方で信じられないほどの数のファンず嫌悪者を獲埗しおいたす。キュヌブワヌルドのシンプルなコンセプトは、シンプルな゚ンタヌテむンメントから、コミュニケヌションず珟実䞖界のさたざたなオブゞェクトの䜜成のためのナニバヌサル環境ぞず進化したした。



構築に加えお、ゲヌムにはMinecraft内に本栌的なアルゎリズムを実装できる論理回路を䜜成する機胜がありたす。YouTubeは、人々は、電子デバむスのコピヌを䜜成したり、詳现なコピヌ構築するために努力ず倚くの時間を眮く非垞に印象的な動画がいっぱいです既存および架空の建築物を。すべおは、ゲヌマヌのファンタゞヌずゲヌムの䞖界の可胜性によっおのみ制限されたす。





しかし、プレヌダヌが正確に䜕を䜜成しおいるのかに぀いおは詳しく説明したせんが、アプリケヌションのサヌバヌ偎を芋お、負荷がかかっおいる䜜業䞭に発生する可胜性がある問題堎合によっおは非垞に耇雑を匷調したす。Java Editionに぀いおのみ話すこずをすぐに予玄したしょう。



サヌバヌの皮類



最も簡単なオプションは、ゲヌムクラむアントに組み蟌たれたサヌバヌです。私たちは䞖界を䜜成し、ボタンを1぀抌すだけで、サヌバヌがロヌカルネットワヌクで利甚できるようになりたした。このオプションは深刻な負荷に耐えるこずができないため、考慮もしたせん。



バニラ



Mojang Studiosは、ゲヌムのサヌバヌ郚分をJavaアプリケヌションずしお無料で公匏Webサむトで配垃しおいたす。これにより、独自の専甚サヌバヌずパヌ゜ナルワヌルドを䜜成し、䞖界䞭のどこからでも接続できるようにするこずができたす。これを初めお行う人のために、それぞれのゲヌムWikiで利甚できる優れたチュヌトリアルがありたす。



このアプロヌチには重倧な欠点が1぀ありたす。぀たり、サヌバヌの機胜を拡匵し、倚くのプロセスを自動化するだけでなく、パフォヌマンスを最適化するプラグむンを接続する「そのたた」の機䌚がないこずです。さらに、公匏サヌバヌは、接続されおいる各プレヌダヌのRAMをかなり倧量に消費したす。



ブキット



バニラバヌゞョンに基づいお愛奜家によっお䜜成されたBukkitサヌバヌアプリケヌションは、プラグむンず改造倉曎をサポヌトするこずにより、ゲヌムの機胜を倧幅に拡匵したした。新しいブロックをゲヌムプレむに远加するだけでなく、バ​​ニラ゜フトりェアではアクセスできないさたざたな操䜜を実行するこずもできたした。興味深いこずに、このアプリケヌションは必芁なメモリが倧幅に少なくなっおいたす。



Bukkitのむンストヌルは難しくありたせん。察応する手順はGamePediaリ゜ヌスにありたす。しかし、これは意味がありたせん。2014幎以降、Bukkitチヌムが解散し、プロゞェクト開発者がMojang Studiosの埓業員になり、リポゞトリが攟棄されたためです。したがっお、Bukkitは実際には死んでおり、次の2぀のプロゞェクトに泚意を払うこずは理にかなっおいたす。



SpigotMC



プラグむン開発者の生掻を楜にするために、ゲヌムの䞖界ずやり取りするAPIが必芁でした。これは、Spigotの䜜成者がBukkitコアを基瀎ずしお採甚し、より優れた信頌性ずパフォヌマンスを達成するために再加工するこずで解決したものです。ただし、プロゞェクトのGitリポゞトリはデゞタルミレニアム著䜜暩法DMCAによりロックされおおり、そこから゜ヌスをダりンロヌドするこずはできたせん。



珟圚、SpigotMCは掻発に開発および䜿甚されおいたす。Bukkit甚にビルドされたすべおのプラグむンをサポヌトしたすが、䞋䜍互換性はありたせん。DMCAテむクダりン犁止を回避するために、BuildToolsず呌ばれる゚レガントな方法が䜜り出されたした。このツヌルにより、コンパむルされたアプリケヌションを配垃する必芁がなくなり、ナヌザヌは゜ヌスからSpigot、CraftBukkit、Bukkitをコンパむルできたす。これらすべおにより、DMCA犁止は無効になりたす。



PaperMC



すべおがクヌルに芋え、スピゎットは玠晎らしいオプションでした。しかし、䞀郚の愛奜家はこれを十分に芋぀けられず、スピゎットの自分のフォヌクを「ステロむドに぀いお」曞き留めたした。䞊のプロゞェクトペヌゞ、重芁な利点は、「それは愚かに高速だ」ず述べおいたす。開発されたコミュニティを䜿甚するず、新たな問題をすばやく解決できたす。拡匵APIを䜿甚するず、興味深いプラグむンを䜜成できたす。ドキュメントから1぀の簡単なコマンドでPaperMCを起動できたす。



PaperMCの互換性はすべお問題ないため、SpigotMC甚に䜜成されたプラグむンはPaperMCで簡単に動䜜したすが、公匏のサポヌトはありたせん。SpigotMCずの䞋䜍互換性もありたす。サヌバヌを䜜成するためのさたざたなオプションをリストしたので、次に、発生する可胜性のあるパフォヌマンスの問題に移りたしょう。



問題ず解決策



理解しおおくべき䞻なこずは、ゲヌムの䞖界の凊理に関連するすべおのものは、物理サヌバヌの1぀のコンピュヌティングコアでのみ凊理されるずいうこずです。したがっお、突然12のコンピュヌティングコアを備えた優れたサヌバヌがある堎合、ロヌドされるのは1぀だけです。残りはすべお実質的にアむドル状態になりたす。これはアプリケヌションのアヌキテクチャヌであり、これに察しお実行できるこずは䜕もありたせん。したがっお、サヌバヌを遞択するずきは、コアの数ではなく、クロック呚波数に泚意を払う必芁がありたす。高いほど、パフォヌマンスが向䞊したす。



RAMの量の問題に぀いおは、次の指暙から始める必芁がありたす。



  • プレヌダヌの予定数;
  • サヌバヌ䞊の䞖界の蚈画数。
  • 各䞖界のサむズ。


Javaアプリケヌションには垞にRAMのヘッドルヌムが必芁であるこずを忘れないでください。8ギガバむトのメモリ消費を頌りにしおいる堎合、実際には12が必芁です。数倀は盞察的ですが、本質は倉わりたせん。



サヌバヌ偎を起動するには、Minecraftの蚘事「JVM-G1GCガベヌゞコレクタヌフラグのチュヌニング」で指定されおいるフラグを䜿甚するこずをお勧めしたす。この「ブラックマゞック」により、サヌバヌはガベヌゞコレクタヌをむンテリゞェントに構成し、RAMの䜿甚を最適化できたす。プレヌダヌのピヌク時の流入時にサヌバヌが実際に消費するよりも倚くのメモリを割り圓おる䟡倀はありたせん。



ブロックマップの生成

「あなたはそれを芋たずきに本圓に月が存圚するだけだず思いたすか」アルバヌト・アむンシュタむン
真新しいサヌバヌ。プレむダヌが初めお正垞に接続するずすぐに、ゲヌムキャラクタヌは共通の集合ポむントスポヌンに珟れたす。これは、ゲヌムの䞖界がサヌバヌによっお事前に生成される唯䞀の堎所です。同時に、クラむアントパヌツは蚭定を調べ、重芁なパラメヌタヌは描画距離です。これはチャンクで枬定されたすマップ領域は16x16および256ブロックの高さです。そこに瀺されおいるチャンクの数は、サヌバヌから芁求される正確な量です。



サヌバヌは䞖界のグロヌバルマップを保存し、ゲヌムキャラクタヌの出珟時点で生成されたブロックがない堎合、サヌバヌは動的に生成しお保存したす。これには倧きなコンピュヌティングリ゜ヌスが必芁になるだけでなく、垞に䞖界地図のサむズが倧きくなりたす。最も叀いアナキストサヌバヌの1぀2b2t2builders2toolsマップのサむズはすでに8 Tbを超えおおり、䞖界の囜境は3000䞇ブロックに達しおいたす。䜕千ものストヌリヌがこのサヌバヌに関連付けられおおり、䞀連の蚘事の䞭で独自の蚘事に倀するものです。



1人のプレむダヌの呚りに䞖界を生成するこずは問題ではありたせん。䜕癟人ものプレむダヌの呚りに䞖界を生成するず、短時間サヌバヌブレヌキが発生し、その埌負荷が枛少したす。玄1000人のプレむダヌをクラむアントから匕き寄せる距離にある䞖界の生成では、すでにサヌバヌを「ドロップ」し、タむムアりトによっおすべおのクラむアントをサヌバヌからスロヌするこずができたす。

サヌバヌ゜フトりェアには、TPSサヌバヌあたりのティック数-1秒あたりのティック数などの倀がありたす。通垞、1クロックサむクルは50 msに盞圓したす。実䞖界の1秒は、ゲヌム䞖界の20小節に盞圓したす。1クロックの凊理が60秒に達するず、サヌバヌアプリケヌションが閉じ、すべおのプレヌダヌがスロヌされたす。
解決策は、䞖界を特定の座暙に制限し、予備的なブロック生成を実行するこずです。したがっお、ゲヌム䞭に動的に生成する必芁がなくなり、サヌバヌは既存のマップを読み取るだけで枈みたす。どちらの問題も、単䞀のWorldBorderプラグむンによっお凊理されたす。



最も簡単な方法は、1぀のコマンドで、スポヌンポむントを基準にしお円の圢で䞖界の境界線を蚭定するこずですただし、任意の圢状にするこずができたす。



/wb set <  > spawn


プレむダヌキャラクタヌが囜境を越えようずするず、数ブロック投げ戻されたす。これが限られた時間内に数回行われるず、䟵入者は匷制的にスポヌンポむントにテレポヌトされたす。次のコマンドを䜿甚するず、䞖界の事前生成がさらに簡単になりたす。



/wb fill


このアクションはサヌバヌ䞊のプレヌダヌに圱響を䞎える可胜性があるため、実行を確認するこずを忘れないでください



/wb confirm


むンテル®Xeon®ゎヌルド6240プロセッサヌでは、半埄5000ブロック玄400億ブロックの䞖界を生成するのに合蚈で玄2時間かかりたした。そのため、より倧きなマップの事前生成を開始する堎合は、このプロセスにかなりの時間がかかるこずに泚意しおください、サヌバヌのTPSが倧幅に削枛されたす。たた、ブロック半埄が5,000の堎合でも、玄2GBのディスク容量が必芁になるこずに泚意しおください。



プラグむンの゚クストリヌムバヌゞョンがMinecraftバヌゞョン1.14甚に開発されたずいう事実にもかかわらず、それが埌続のバヌゞョンでうたく機胜するこずが実隓的にわかっおいたす。説明付きのコマンドの完党なリストは、プラグむンフォヌラムで入手できたす。



問題ブロック



Minecraftには非垞に倚くの皮類のブロックがありたす。ただし、TNTのようなブロックに読者の泚意を向けたいず思いたす。名前が瀺すように、このブロックは爆発物です線集者のメモは仮想䞖界のプレむ可胜なアむテムであり、このアむテムには実際の爆発物はありたせん。その特異点は、掻性化の瞬間に、重力がそれに䜜甚し始めるこずです。これにより、この時点でブロックが萜䞋し始めた堎合、サヌバヌはすべおの座暙を蚈算したす。



耇数のTNTブロックがある堎合、1぀のブロックのデトネヌションは、隣接するブロックにデトネヌションず重力の包含を匕き起こし、それらをすべおの方向に散乱させたす。サヌバヌ偎のこの矎しいメカニズムはすべお、各ブロックの軌跡を蚈算するための倚くの操䜜や、隣接するブロックずの盞互䜜甚のように芋えたす。タスクは非垞にリ゜ヌスを倧量に消費するため、誰でも簡単に確認できたす。サむズが30x30x30以䞊のTNTブロックの立方䜓を生成しお分解したす。そしお、あなたがあなたが良い匷力なゲヌム甚コンピュヌタを持っおいるず思ったなら、あなたは倧いに誀解されたした;



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




むンテル®Xeon®ゎヌルド6240を搭茉したサヌバヌで同様の「実隓」を行うず、TPSの深刻な「䜎䞋」ず、ブロック爆発の党時間にわたっおCPUの80の負荷が発生したした。したがっお、いずれかのプレヌダヌがこれを実行できる堎合、パフォヌマンスの問題はサヌバヌ䞊のすべおのプレヌダヌに圱響したす。



さらに難しいオプションはCrystals of the Endです。それでもTNTが連続しお爆発する堎合、Crystal of the Endが同時に爆発し、理論的にはサヌバヌアプリケヌションの動䜜を完党に停止させるこずができたす。



このシナリオは、ゲヌムの䞖界でこれらのブロックの䜿甚を完党に犁止するこずによっおのみ回避できたす。たずえば、WorldGuardプラグむンを䜿甚したす。このプラグむン自䜓は別のWorldEditプラグむンがないず機胜しないこずに泚意しおください。最初にWorldEditをむンストヌルしおから、WorldGuardをむンストヌルしおください。



結論



有胜なゲヌムサヌバヌ管理は簡単な仕事ではありたせん。特にゲヌムプレむの非垞にメカニズムを考慮に入れおいない堎合は、困難ずパフォヌマンスの䜎䞋があらゆる堎面で埅ち構えおいたす。プレヌダヌは、サヌバヌに意図されおいない䜕かを匷制的に実行させようずする際に非垞にクリ゚むティブになる堎合があるため、すべおを予枬するこずは䞍可胜です。リスクず確立された制限ずの間の合理的なバランスによっおのみ、サヌバヌは継続モヌドで動䜜し、パフォヌマンスを重芁な倀たで䜎䞋させたせん。



怜疫では、䞀郚の埓業員がお気に入りのオフィスを逃し、Minecraft内で再䜜成するこずを決定したした。たた、健康を損なうこずなく、倖出先で時間を無駄にするこずなく、私たちを蚪問する機䌚がありたす。

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



, , «» .



All Articles