Wymagania dla Spigot + DiscordSRV oraz wysokie zużycie CPU

Pytania i problemy
mloskot
mloskot

Na nowiutkim 4GB RAM Game FR 2021 zainstalowaliśmy z synem Spigot 1.16.5 oraz plugin DiscordSRV. Ostatecznie mamy tam 4 pluginy: WorldEdit, DiscordSRV, GamemodeChanger, WorldGuard

Skonfigurowaliśmy spięcie z Discord, wszystko funkcjonuje bardzo dobrze, kanały chat oraz konsoli, itp.

Jest tylko jeden problem: zasobożerność, której nie obserwowaliśmy przy 3 instalacjach vanilla Minecraft na takim samym planie 4GB RAM FR, nie rzadko z ilością mod'ów ponad 15 😆

A przy Spigot mamy taką sytuację:

image|654x149

Serwer uruchamiamy poprzez systemd, w pliku minecraft.service linia odpalająca wygląda tak:

ExecStart=/usr/bin/screen -DmS minecraft /usr/bin/java -Xms3G -Xmx3G -XX:+UseG1GC
 -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 
 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch
 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M
 -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4
 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90
 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem
 -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true
 -jar spigot-1.16.5.jar nogui

Generalnie jak czytam o wymaganiach Spigot to widzę, że serwer śmiga nawet przy 1GB dla max 10 użytkowników :thinking: Podejrzewam, że DiscordSRV jest tu najbardziej wymagającym elementem.

Czy ktoś z doświadczonych tu użytkowników Spigot'a może to potwierdzić? A może jest jakaś opcja optymalizacji dla Spigot czy konfiguracji dla DiscordSRV, o której powinniśmy wiedzieć? :-)

Z góry dzięki za pomoc

anon58059726
anon58059726

Spróbuj zmienić silnik Spigot na PaperSpigot

Więcej nie pomogę, ponieważ nie mam pojęcia i nie chcę wprowadzić cię w błąd

Helios1993
Helios1993

Spigot jest bardzo zasobożernym silnikiem i ogólnie jest śmieciowy, zalecam skorzystać z airplane'a lub purpura.

Jakubk15
Jakubk15

W tym przypadku tak. Ale weź pod uwagę to, że Paper i jego forki bardzo mocno modyfikują silnik JAR Minecrafta, przez co są mniej stabilne niż zwykły Spigot. Więc nie nazywaj silnika, na którym bazują wszystkie inne śmieciowym.

mloskot
mloskot

Dzięki za wszystkie podpowiedzi.

Zrobiłem test z użyciem Paper 1.16.5 Build 734 lecz nie widzę żadnej poprawy.

Najwyraźniej nie jestem jedynym, króry obserwuje Spigot 1.16.5 High CPU 😦

Z powyższego wątku wynika, że 3GB RAM przyznane dla Spigot 1.16.5 to dużo za mało. No i jak tu zrobić dzieciakowi przyjemność po taniości ;-)

UPDATE: Ktoś mi na forum Spigot poradził zmianę na https://github.com/Tuinity/Tuinity, potestuję jutro.

Timo
Timo Moderator forum.lvlup.pro

Nowe wersje Minecrafta niestety cechują się słabą wydajnością serwerów. Konieczne jest optymalizowanie, nawet przy małych instancjach.

Ogólnie mamy na forum obszerny wątek odnośnie tej kwestii: https://lvlup.rok.ovh/t/obszerny-poradnik-dotyczacy-optymalizacji-serwerow-minecraft-1-13/14662?u=timo

Najlepiej zrób timingi w momencie gdy zużycie CPU jest duże. Wystartujesz je komendą /timings on. Po kilku minutach (najlepiej około 10 minut) poleceniem /timings paste wygenerujesz link do raportu. Możesz go tutaj podesłać, zobaczymy w czym leży problem.

mloskot
mloskot

@Timo Dzięki! Gdzieś mi przeleciało o timings ale nie zakumałem, że tu wbudowana funkcjonalność serwera. Potestuję.


Przypomniało mi się jeszcze jedno, że podczas testów Paper logował takie ostrzeżenie:

[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] ************************************************************
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * WARNING - YOU ARE RUNNING AN OUTDATED VERSION OF JAVA.
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * PAPER WILL STOP BEING COMPATIBLE WITH THIS VERSION OF
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * JAVA WHEN MINECRAFT 1.17 IS RELEASED.
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] *
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * Please update the version of Java you use to run Paper
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * to at least Java 16. When Paper for Minecraft 1.17 is
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * released support for versions of Java before 16 will
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * be dropped.
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] *
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * Current Java version: 11.0.11
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] *
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * Check this forum post for more information: 
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] *   https://papermc.io/java16
[21:41:37] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] ************************************************************

a więc mam

# java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)

Być może tu jest jakiś problem i po aktualizacji Javy do zalecanej wersji wszystko zacznie pykać jak należy. Będzie co robić :-)

Aylin
Aylin ex-admin forum.lvlup.pro

Obecnie jest to tylko ostrzeżenie. Wraz z wersją 1.17 sporo rzeczy się zmieni więc to całkiem rozsądne że "przy okazji" zmieni się też wymagana wersja Javy (która w sumie już zmieniła się od któregoś snapshota).

Helios1993
Helios1993

Właśnie to spigot jest dużo mniej stabilny, nadal posiada sporo błędów i niszczy domyślne mechaniki gry. Paper w chwilę naprawia błędy Minecrafta oraz spigota, dzięki czemu rozgrywka jest bardziej zbliżona do vanilli i błędy (takie jak kopiowanie przedmiotów czy crashe serwera) nie istnieją. Twórcy spigota nie dodają już do niego nowych rzeczy, a jedynie aktualizują go do nowych wersji Minecrafta.

mloskot
mloskot

Timo:

Najlepiej zrób timingi w momencie gdy zużycie CPU jest duże. Wystartujesz je komendą /timings on. Po kilku minutach (najlepiej około 10 minut) poleceniem /timings paste wygenerujesz link do raportu.

Hej, trochę to trwało ale w końcu zrobiłem timingi:

>timings on
[20:12:50] [Server thread/INFO]: Enabled Timings & Reset
[20:14:04] [User Authenticator #1/INFO]: UUID of player User123is f1a24075-d7f9-49db-91e3-80469f0cf04d
[20:14:06] [Server thread/INFO]: User123[/195.224.141.146:59906] logged in with entity id 179 at ([world]-458.05648742977576, 112.04985981579428, 187.15378326482627)
[20:14:11] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 5040ms or 100 ticks behind
>timings paste
[20:22:45] [Timings paste thread/INFO]: Timings results can be viewed at https://www.spigotmc.org/go/timings?url=eguyetufim
>

Raport dostępny na https://www.spigotmc.org/go/timings?url=eguyetufim

Będę wdzięczny za wszelkie oświecenie na jego temat :)

Lempik
Lempik

Nie sądzę, że akurat DiscordSRV powoduje obciążenie. Mam DiscordSRV i dużo więcej pluginów na VPS 4GB FR i takich objawów nie obserwuję. Jaki masz view-distance na serwerze? Czy są wszystkie chunki wygenerowane z góry, czy się generują dopiero wtedy, jak ktoś się zbliży do danego miejsca?

Helios1993
Helios1993

Stare timingi spigota nic mi nie powiedzą, zmień silnik na airplane i zrób je ponownie.

mloskot
mloskot

Lempik:

Jaki masz view-distance na serwerze?

Był domyślny 10, zmieniłem na 4, lecz nie daje to zauważalnej poprawy.

Lempik:

Czy są wszystkie chunki wygenerowane z góry, czy się generują dopiero wtedy, jak ktoś się zbliży do danego miejsca?

Ustawienia domyślne, tutaj aktualny server.properties, czyli generują się on-fly. Nie wiem jak wygenerować z góry, z tego co wyszukałem na szybko to wymaga to plugina/skryptu.

Sytuacja wygląda tak, że tuż po połączeniu klienta z serwerem następuje turbo lag i tak na prawdę gracz nie ma zbyt wiele szansy na poruszanie się i powodowanie generowania świata :-)

Helios1993:

Stare timingi spigota nic mi nie powiedzą, zmień silnik na airplane i zrób je ponownie.

Spróbuję z airplane, dzięki.

Aylin
Aylin ex-admin forum.lvlup.pro

mloskot:

Nie wiem jak wygenerować z góry

Świat możesz wygenerować na kilka sposobów, jeśli przewidywana mapa jest mała to można zrobić to "ręcznie" czyli wygenerować chunki przelatując nad nimi. Zrobiłam tak mając potrzebę przetestowania kilku rzeczy - ustawiłam dość niewielką mapkę, wygenerowałam na PC a potem przerzuciłam na VPS. Potem zwiększałam "po kawałku" world border jak przyszła na to potrzeba i nowe chunki generowały się na VPS. Pewnie da się zrobić to szybciej i/lub wydajniej ale jak potrzeby są niewielkie to nie ma co wymyślać cudów na kiju :man_shrugging:

Testowałam też coś takiego jak miałam zapotrzebowanie na większą mapę, może jeszcze nawet działa :harold: https://github.com/GoldenDelicios/world-pregen

krfcm
krfcm Pionier

Na vps możesz wygenerować świat używając pluginu chunky: https://www.spigotmc.org/resources/chunky.81534/

mloskot
mloskot

Nie miałem czasu by przetestować pre-generowanie świata.

Zrobiłem jednak inny szybki test:

  • Zaktualizowałem Javę z 11 do 16
  • Zbudowałem i uruchomiłem Spigot 1.17
  • Uruchomiłem Spigot
  • Po pełnym uruchomieniu CPU na poziomie 12%

Na tej podstawię podejrzewam, że albo poprzednio (wyżej) testowany Spigot 1.16.5 może faktycznie mieć jakiś problem z Java 11 albo po prostu coś zostało poprawione w Spigot 1.17.

Po prostu nie jestem w stanie uwierzyć, że VPS z 4 GB RAM to tak turbo za mało dla Spigot, że nawet bez gracza rozkręca wrotki CPU na 99%. Shared hosting deklarują, że uruchomią mi Spigot na 2 GB RAM. Dlatego na ten moment odpuszczam samodzielne wyciskanie potów ze Spigot na VPS, odpalę go na jakimś shared hostingu, porównam i przekonam się sam :slight_smile:

Tymczasem piękne dzięki wszystkim tu za pomoc.

Jakubk15
Jakubk15

Ok. Jeszcze jak mowa o 1.17, to od siebie polecam zainstalować Tuinity jako silnik: https://ci.codemc.io/job/Spottedleaf/job/Tuinity/ Jak będziesz miał czas to znajdź w internecie polecane configi na ten silnik i będzie śmigać.

Helios1993
Helios1993

Aktualnie nie jest zbyt stabilny, jednymi z poważniejszych błędów papera i jego forków 1.17 są nie zawsze ładujące się chunki i niezapisujący się świat po wyłączeniu serwera (trzeba zabijać proces). Lepiej jest chwilę poczekać na stabilne buildy.

Jakubk15
Jakubk15

Ten błąd jest już naprawiony

system
system

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.