如何讓經過改裝的我的世界伺服器在個人電腦上順利執行?
我正在尋找為我自己和朋友執行一個修改過的我的世界伺服器(1.12.2)來玩。我們希望使用很多模組,我想知道我可以做些什麼來使伺服器執行更順暢。截至目前,它滯後了很多,即使是一個新生成的世界。在網上環顧四周,我能找到的所有資訊都感覺至少有點過時了,有時甚至過時了很多。因此,雖然這是為了讓特定的伺服器啟動並執行,但我也很感激使用目前版本的 java 來優化性能。
根據 LagGoggles 的說法,主要的罪魁禍首似乎是暴徒,每次執行分析器時,一兩個(每次執行時都會改變一個)每次執行大約需要 20-30 毫秒。
根據 warmroast 的說法,某些原因導致遊戲花費大量時間為羊尋找路徑,並且花費大量時間在 UpdateTimeLightAndEntities 上,大約佔伺服器執行緒資源的 80%。
有沒有優化實體計算的mod?或者也許是一種確定哪些模組對性能影響最大的方法,所以我知道哪些模組應該專注於刪除或擺弄配置?
該伺服器在一台配備 Ryzen 2200G(可能很快會升級到 3600,但希望會有所幫助)和 16 GB DDR4-2666 RAM 的電腦上執行。它還有一個 GTX 1060-6GB 但我有理由確定顯卡對此無關緊要。(不過,如果我可以將一些計算負載解除安裝到它上面會很好……有沒有辦法做到這一點?)
我正在使用帶有 OpenJ9 JVM 的 OpenJDK 8,使用命令啟動伺服器
"C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-openj9\bin\java.exe" -server -XX:+UseG1GC -Xmx8G -Xms8G -Dsun.rmi.dgc.server.gcInterval=2147483646 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -jar forge-1.12.2-14.23.5.2847-universal.jar
。我實際上不知道這些標誌中的大多數是做什麼的,但有人告訴我它們會有所幫助。我認為他們做到了,至少有一點,但仍然有很多滯後。
好吧,我最終找到了解決方案。事實證明,由於大多數 Minecraft 模組都是由業餘愛好者而不是經驗豐富的編碼人員製作的,因此他們有一些常見的不良程式習慣,其中之一似乎過於頻繁地呼叫顯式垃圾收集,佔用大量 CPU 時間.
因此,將
-XX:+DisableExplicitGC
標誌添加到 java 參數有很大幫助,然後對自動垃圾收集器進行各種其他調整,在這篇部落格文章中發現了一個比我更了解他們正在做什麼的人,降低了 CPU 使用率當沒有人線上時,持續 60% 到低至 1%,並且滴答時間現在相當穩定在 2~10 毫秒,而不是在 0.3 ms 空閒並飆升至 ~400 ms。為了不使這有效地成為僅連結的答案,以下是上述部落格文章建議用於 1.8 和 1.15 之間的任何 minecraft 版本的 JVM 參數:
java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=8 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=true -Daikars.new.flags=true -jar serverjargoeshere.jar
消息來源說您應該隨意將 -Xmx 和 -Xms 參數更改為您希望使用的記憶體量,並且一切都應該正常工作。原始碼中沒有提到這些標誌似乎有助於客戶端性能以及伺服器性能,儘管可能沒有達到同樣的極端程度。