Wymagania dla Spigot + DiscordSRV oraz wysokie zużycie CPU

mloskot | 2021-05-27 18:49:15 UTC | #1

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 :laughing:

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 | 2021-05-26 10:16:38 UTC | #2

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 | 2021-05-26 11:32:01 UTC | #3

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


Jakubk15 | 2021-05-26 11:56:57 UTC | #4

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 | 2021-05-26 22:14:32 UTC | #5

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 :frowning:

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 | 2021-05-26 22:55:22 UTC | #6

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://forum.lvlup.pro/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 | 2021-05-27 12:41:03 UTC | #7

@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 | 2021-05-27 12:53:55 UTC | #8

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 | 2021-05-27 19:36:42 UTC | #9

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 | 2021-06-12 20:25:36 UTC | #10

[quote=”Timo, post:6, topic:19133”]
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.
[/quote]

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 | 2021-06-12 20:48:14 UTC | #11

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 | 2021-06-12 20:50:41 UTC | #12

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


mloskot | 2021-06-12 22:32:25 UTC | #13

[quote=”Lempik, post:11, topic:19133”]
Jaki masz view-distance na serwerze?
[/quote]

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

[quote=”Lempik, post:11, topic:19133”]
Czy są wszystkie chunki wygenerowane z góry, czy się generują dopiero wtedy, jak ktoś się zbliży do danego miejsca?
[/quote]

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 :-)

[quote=”Helios1993, post:12, topic:19133”]
Stare timingi spigota nic mi nie powiedzą, zmień silnik na airplane i zrób je ponownie.
[/quote]

Spróbuję z airplane, dzięki.


Aylin | 2021-06-13 10:37:43 UTC | #14

[quote=”mloskot, post:13, topic:19133”]
Nie wiem jak wygenerować z góry
[/quote]

Ś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
https://github.com/GoldenDelicios/world-pregen


krfcm | 2021-06-13 14:57:16 UTC | #15

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


mloskot | 2021-06-22 14:49:10 UTC | #16

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 | 2021-06-23 19:11:20 UTC | #17

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 | 2021-06-24 05:15:16 UTC | #18

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 | 2021-06-26 05:23:23 UTC | #19

Ten błąd jest już naprawiony


system | 2021-07-28 05:24:06 UTC | #20

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