我的世界伺服器優化

我的世界伺服器優化
在我們的部落格上我們已經 告訴,如何創建自己的 Minecraft 伺服器,但五年過去了,很多事情都改變了。 我們正在與您分享當前創建和優化此類流行遊戲的伺服器部分的方法。

在 9 年的歷史中(從發布日期算起),《我的世界》在普通玩家和極客中贏得了驚人的粉絲和仇恨者。 由區塊組成的世界的簡單概念已經從一種簡單的娛樂形式發展成為一種用於交流和創建現實世界中的各種物件的通用媒介。

除了建造之外,遊戲還可以創造 邏輯,它允許您在 Minecraft 中實現成熟的演算法。 YouTube 上充滿了令人印象深刻的視頻,人們在這些視頻中投入了大量的精力和時間,創建了這個或那個電子設備的副本,或者構建了詳細的副本 現存的 и 虛構的 建築結構。 一切僅受限於玩家的想像力和遊戲世界的可能性。


但是,我們不要進一步討論玩家到底創建了什麼,而是讓我們看看應用程式的伺服器部分,並重​​點介紹在負載下運行期間可能出現的問題(有時非常複雜)。 我們馬上預約一下,我們只討論 Java 版。

伺服器類型

最簡單的選擇是在遊戲客戶端內建伺服器。 我們創建了一個世界,按下一個按鈕,伺服器就可以透過本地網路存取。 該選項無法承受任何嚴重的負載,因此我們甚至不會考慮它。

雲尼拿

Mojang Studios 將遊戲的伺服器部分作為 Java 應用程式免費分發 在官方網站上。 這允許您創建自己的 專用服務器 和個人世界,使其可以從地球上的任何地方連接。 對於那些第一次這樣做的人來說,有一個很棒的 教程,可在對應的遊戲 Wiki 上找到。

這種方法有一個嚴重的缺點,就是缺乏連接插件的開箱即用功能,這些插件可以擴展伺服器的功能,不僅可以自動化許多流程,還可以優化效能。 此外,官方伺服器對每個連接的玩家都有相當大的記憶體消耗。

布基特

愛好者基於Vanilla版本創建的伺服器應用程式 布基特 透過支援外掛和模組(修改)顯著擴展了遊戲的功能。 它不僅允許在遊戲中添加新的區塊,還可以執行普通軟體無法存取的各種操作。 有趣的是,這個應用程式需要的記憶體明顯更少。

安裝 Bukkit 並不困難;相應的說明在資源上 遊戲百科。 但這沒有意義,因為自 2014 年起 Bukkit 團隊解散,專案開發人員都成為 Mojang Studios 的員工,並且 存儲庫 棄。 因此,Bukkit 實際上已經死了,關注接下來的兩個項目是有意義的。

插管MC

為了讓插件開發人員的生活更輕鬆,需要一個 API 來與遊戲世界互動。 這正是創作者要解決的問題。 塞子,採用 Bukkit 核心並對其進行重新設計,以實現更好的可靠性和性能。 儘管如此, Git 儲存庫 該項目因《數位千禧年版權法》而被阻止(DMCA),並且無法從那裡下載原始程式碼。

目前,SpigotMC正在積極開發和使用。 它支援為 Bukkit 創建的所有插件,但不向後相容。 為了繞過 DMCA Takedown,發明了一種名為 BuildTools 的優雅方法。 該工具無需分發已編譯的應用程序,並允許用戶從原始程式碼編譯 Spigot、CraftBukkit 和 Bukkit。 所有這些都使得 DMCA 禁令毫無用處。

紙MC

一切看起來都很酷,Spigot 成為了一個不錯的選擇。 但這對於一些愛好者來說還不夠,他們「在類固醇上」創建了自己的 Spigot 分支。 在 專案頁面 關鍵的優點是「速度太快了」。 發達 社區 允許您快速解決新出現的問題,擴展的 API 允許您創建有趣的插件。 您可以使用一個簡單的命令啟動 PaperMC,如下所示 文件.

PaperMC 具有出色的兼容性,因此為 SpigotMC 編寫的插件可以輕鬆地在 PaperMC 上工作,但無需官方支援。 還具有與 SpigotMC 的向後相容性。 現在我們已經列出了創建伺服器的各種選項,讓我們繼續討論可能出現的效能問題。

問題與解決方案

您需要了解的主要一點是,與處理遊戲世界相關的所有內容都將僅在實體伺服器的一個運算核心上處理。 因此,如果你突然擁有一台擁有十幾個運算核心的優秀伺服器,那麼只會載入一個。 所有其他人實際上都將閒置。 這是應用程式的架構,您對此無能為力。 所以在選擇伺服器的時候,應該要注意的不是核心數量,而是時脈頻率。 它越高,性能就越好。

關於RAM容量的問題,我們應該從以下幾個指標出發:

  • 計劃的玩家人數;
  • 伺服器上計劃的世界數量;
  • 每個世界的大小。

應該記住,Java 應用程式始終需要預留 RAM。 如果您預期記憶體消耗為 8 GB,那麼實際上需要 12 GB。數字是相對的,但本質沒有改變。

要啟動伺服器部分,我們建議使用文章中指定的標誌 調整 JVM – Minecraft 的 G1GC 垃圾收集器標誌。 這個「黑魔法」允許伺服器正確配置「垃圾收集器」並優化 RAM 的使用。 在玩家湧入高峰期間,您分配的記憶體不應超過伺服器實際消耗的記憶體。

產生區塊圖

“你真的認為月亮只有在你看到它的時候才存在嗎?” (艾爾伯特愛因斯坦)

全新的伺服器。 一旦玩家第一次成功連接,遊戲角色就會出現在總聚集點(出生點)。 這是伺服器預先生成遊戲世界的唯一地方。 同時,客戶端看設置,關鍵參數是繪製距離。 它以區塊為單位(地圖區域為 16×16,高 256 個區塊)。其中指示有多少區塊,就準確地向伺服器請求了多少區塊。

伺服器儲存世界的全域地圖,如果遊戲角色出現時其中還沒有產生的區塊,則伺服器動態生成它們並儲存它們。 這不僅需要大量的運算資源,而且還不斷增加世界地圖的尺寸。 在最古老的無政府主義伺服器之一上 2b2t (2builders2tools) 地圖大小已經超過 8 Tb,世界邊界大約有 30 萬個方塊。 有數千個與該伺服器相關的故事,並且值得在該系列中單獨撰寫一篇文章。

圍繞一名玩家生成一個世界不是問題。 產生一個包含數百名玩家的世界將導致伺服器在短時間內出現輕微的速度下降,之後負載將會減少。 在客戶端渲染距離產生一個大約有一千個玩家的世界已經能夠「丟棄」伺服器並由於超時而將所有客戶端拋出。

在伺服器軟體中有一個值,例如 TPS (每個伺服器的滴答數 - 每秒滴答數)。 通常,1 個時鐘週期等於 50 ms。 (現實世界的 1 秒等於遊戲世界的 20 個刻度)。 如果一周期的處理時間增加到 60 秒,伺服器應用程式將關閉,並拋出所有玩家。

解決方案是將世界限制在某些座標並執行初步的區塊生成。 因此,我們消除了遊戲過程中動態生成的需要,伺服器只需要讀取現有的地圖。 這兩個問題都可以透過一個插件解決 世界邊界.

最簡單的方法是使用一個命令將世界邊界設置為相對於生成點的圓形(儘管您可以將其設置為任何形狀):

/wb set <радиус в блоках> spawn

如果玩家角色試圖越過邊界,他將被推回幾個街區。 如果在有限的時間內多次這樣做,違規者將被強制傳送到重生點。 世界的預生成更加簡單,使用以下指令:

/wb fill

由於此操作可能會影響伺服器上的玩家,因此請務必確認:

/wb confirm

在 Intel® Xeon® Gold 5000 處理器上產生半徑為 40 個區塊(約 2 億區塊)的世界總共需要大約 6240 小時。因此,如果您想預先產生更大的地圖,請注意:這個過程會花費相當長的時間,伺服器的TPS會嚴重降低。 另外,請記住,即使半徑為 5000 個區塊也將需要大約 2 GB 的磁碟空間。

儘管該插件的最新版本是為 Minecraft 1.14 版本開發的,但實驗發現它在後續版本中運作良好。 提供了帶有解釋的完整命令列表 在插件論壇上.

問題區塊

Minecraft 中有各種各樣的方塊。 但是,我們想提請讀者註意這樣的塊: TNT。 顧名思義,這個方塊是個爆炸物 (編者註 - 這是虛擬世界的遊戲物品,該物品與真實的炸藥無關)。 它的特殊之處在於,在激活的那一刻,重力就開始作用在它上面。 如果此時方塊開始下落,這將迫使伺服器計算所有座標。

如果有多個 TNT 塊,則其中一個塊的爆炸會引起相鄰塊的爆炸並激活重力,將它們分散到各個方向。 伺服器端的所有這些美麗的機制看起來都需要進行大量操作來計算每個區塊的軌跡,以及與相鄰區塊的互動。 任務非常耗費資源,任何人都可以輕鬆檢查。 用 TNT 塊產生並引爆一個尺寸至少為 30x30x30 的立方體。 如果您認為自己擁有一台性能優良、功能強大的遊戲電腦,那您就大錯特錯了 😉

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

我的世界伺服器優化
在採用 Intel® Xeon® Gold 6240 的伺服器上進行的類似「實驗」導致 TPS 嚴重下降,並且在整個區塊爆炸時間內 CPU 負載達到 80%。 因此,如果任何一個玩家能夠做到這一點,那麼效能問題就會影響到伺服器上的所有玩家。

一個更艱難的選擇— 邊緣水晶。 如果 TNT 仍然順序爆炸,那麼 Edge Crystals 會同時引爆,理論上可以完全停止伺服器應用程式的運作。

只有完全禁止在遊戲世界中使用這些方塊才能避免這種情況。 例如,使用插件 世界衛士。 請注意,如果沒有其他插件,該插件本身無法工作 世界編輯。 因此,先安裝 WorldEdit,然後再安裝 WorldGuard。

結論

正確管理遊戲伺服器並不是一件容易的事。 困難和效能下降將隨時等著你,特別是如果你不考慮遊戲機製本身。 預見一切是不可能的,因為玩家有時會非常有創意地試圖迫使伺服器做一些原本不該做的事情。 只有在風險和既定限制之間取得合理的平衡,伺服器才能持續運行,並且不會將其效能降低到臨界值。

在隔離期間,我們的一些員工錯過了他們最喜歡的辦公室,並決定在 Minecraft 中重新創建它們。 您還有機會來拜訪我們,而不會危及您的健康或在路上浪費時間。

為此,我們邀請所有人訪問我們的伺服器 我的世界.selectel.ru (客戶端版本 1.15.2),其中重新創建了資料中心 Tsvetochnaya-1 和 Tsvetochnaya-2。 不要忘記同意下載其他資源,它們對於正確顯示某些位置是必要的。

任務、促銷代碼、復活節彩蛋和愉快的溝通等著您。

來源: www.habr.com

添加評論