Problemy z wydajnością serwera Minecraft na VPS

aggankx | 2020-02-08 14:55:56 UTC | #1

Od jakiegoś czasu zastanawiamy się co można by było zrobić aby rozgrywka na serwerze minecraft była płynniejsza. Wiadomo, nowe wersje potrzebują większej ilości zasobów. Zrobione zostało wszystko: pregenerowany świat, wybór jako silnik paper’a, wybór flag aikara, pozostawienie wolnego RAMu dla systemu i javy poza minecraftem (3 GB z 8 GB) ale nadal nie przyniosło to jakiejś znaczącej poprawy.

Wysyłałem timingsy na help paper’a a ostatnio zacząłem się skupiać bardziej na VPSie i przekazałem komuś ciut bardziej ogarniętemu to stwierdził, że “core widać że przewalone”. Ja się na tym tak dobrze nie znam, Bopke pomógł mi w htopie ustawić detailed cpu time i wygląda to mniej więcej tak:
image|570x386

image|570x386

Co mogę jeszcze zrobić/sprawdzić? Ma ktoś jakieś rady?


Timo | 2020-02-07 20:05:48 UTC | #2

Podeślesz te timingi? Fakt, widać że CPU jest mocno załadowany, ale serwer gry chyba nie powinien tyle zużywać :thinking:


aggankx | 2020-02-07 20:06:09 UTC | #3

https://timings.aikar.co/?id=b283a710789d4a7eaeb17b6c57b131b6


Nieznajomy11 | 2020-02-07 20:24:59 UTC | #4

Poważne problemy z GC. Norma przy połączeniu nowych wersji mc i javy 8. Na początek zmień jave na 11 lub nowszą. Mogę polecić na obecną chwilę HotSpot OpenJDK 11 z https://adoptopenjdk.net/.


aggankx | 2020-02-07 22:57:51 UTC | #5

well, java zmieniona i nie wygląda by było lepiej, a nawet gorzej bo TPSy przy 10 osobach to teraz spadły do 12 ;-;
htop wygląda tak:
image|642x386

timings’y akurat zbyt krótki okres do analizy chyba tak od razu po restarcie, porównam jutro przy większym obciążeniu niż 10 graczy i dokonam update [ no chyba że ktoś bardzo potrzebuje i chce zobaczyć to co jest obecnie https://timings.aikar.co/?id=92b97744100b4420943e1c634a178ed0 ]


Nieznajomy11 | 2020-02-08 06:43:59 UTC | #6

Przy okazji możesz zaktualizować papera, bo jesteś 3 buildy do tyłu. Generalnie czeka kilka na githubie prów dotyczących wydajności od niezłego optymalizacyjnego świra, jak już przejdą, to też powinno trochę pomóc.

Co nie zmienia faktu, że masz w tej chwili wysoki steal, nawet wyższy niż wcześniej (ten jasnoniebieski, cyjan). To jest VPS z lvlup?


aggankx | 2020-02-08 12:08:15 UTC | #7

Zauważyłem że jestem 3 buildy do tyłu, właśnie będę aktualizował : )

Tak, to vps z lvlup

//edit
Po zaktualizowaniu javy do 11 zaczęły mi dodatkowo jakieś błędy wyskakiwać w stylu https://pastebin.com/GCrbKcj6 i serwer stał się całkowicie niegrywalny, powróciłem do javy 8

image|647x21
ciekawi mnie to 36% steal’a


JakubEG | 2020-02-08 13:19:43 UTC | #8

Poproś o przeniesienie na inny “luźniejszy węzeł”, kiedyś miałem podobny problem z procesorem i to pomogło. Dostałem też informację że faktycznie zrobiło się dość ciasno wtedy na tamtym węźle.


JakubEG | 2020-02-08 13:23:42 UTC | #9

To nie zawsze jest rozwiązanie, testując 1.15.2 wyszło (u mnie) że lepiej pracuje na java 8 jre od OpenJDK, ale to może być kwestia pluginów bo na czystym serwerze paper 1.15.2 np. uruchamiał się szybciej na 11.


aggankx | 2020-02-08 13:34:34 UTC | #10

Wysłałem ticketa, zobaczymy co dalej


Nieznajomy11 | 2020-02-08 13:40:51 UTC | #11

[quote=”JakubEG, post:9, topic:13478, full:true”]
To nie zawsze jest rozwiązanie, testując 1.15.2 wyszło (u mnie) że lepiej pracuje na java 8 jre od OpenJDK, ale to może być kwestia pluginów bo na czystym serwerze paper 1.15.2 np. uruchamiał się szybciej na 11.
[/quote]

Jakoś wątpie, że w javie 8 jest lepsze GC. Mogę jedynie uwierzyć, że jakaś z twoich wtyczek na wersji javy 11 nie mogła używać usuniętych unsafe rzeczy, więc miała inna - gorszą implementacje.

Z drugiej strony patrząc na jakość wszelkich testów porównawczych wydajności w Minecraft robionych przez “administratorów serwerów”, to 99% z tych testów nie ma prawa bytu, bo nie są realnym testem, serwer Minecraft ciągle się zmienia i odtworzenie tego samego stanu do porównania wydajności (szczególnie gdy mówimy o graczach, którzy grają w konkretnych miejscach na serwerze i robią konkretne rzeczy, konkretny stan tick loopu) jest bardzo trudne, jak nie prawie niemożliwe.


aggankx | 2020-02-08 13:44:21 UTC | #12

Z tego co wiem to np. plugin Citizens jest pisany pod jave 8 i na javie wyższej jest problematyczny (jakieś dziwne błędy się pojawiają)

Ale faktycznie, wydajność na java 11 z pluginami w moim wypadku była niższa od wydajności javy 8. Ja rozumiem, że teoria mówi inaczej, ale w praktyce jak było w moim przypadku - informuję.


JakubEG | 2020-02-08 13:48:55 UTC | #13

Jeszcze nie widziałem żywego przykładu że serwer z np. 100 osobami online działa lepiej na jakiejkolwiek javie 11, gdzieś coś ludzie piszą ale żadnych dowodów.


Nieznajomy11 | 2020-02-08 14:14:53 UTC | #14

No widzisz, a ja akurat przetestowałem to na wielu serwerach, na których jest całkiem sporo graczy i jest różnica, wykresy “stabilności serwerów” mają się lepiej, a czasy gc są konsekwentnie niższe.

image|258x500, 75%

image|187x405, 75% image|183x230, 75%

Java 11 nie jest lekarstwem na wszystkie problemy, jak każda tego typu zmiana. Nie znaczy to jednak, że java 8 “działa lepiej”, bo zwyczajnie, w aspekcie GC (G1GC) tak nie jest (no, może pod warunkiem, że nie używamy jednowątkowego vpsa).

Dość długo już się tym zajmuję i mimo obrzydliwych rzeczy, które są na części z tych serwerów, nadal udaje się im nie wybuchnąć i być na rozsądnym poziomie TPS, ale jednak trochę to pracy wymagało.


JakubEG | 2020-02-08 14:20:01 UTC | #15

No okej, tobie działa lepiej mi się nie chce teraz pokazywać dowodów że u mnie na pojedynczym serwerze (survival) gdzie jest 100 graczy działa wszystko przy 20 TPS i to na java 8 (Nie ograniczając przy tym drastycznie view-distance (co jest straszne).
a z takimi samymi parametrami na java 11 czy 13 spadki momentalnie do -12


Nieznajomy11 | 2020-02-08 14:24:45 UTC | #16

Czy zrobiłeś cokolwiek, żeby znaleźć prawdziwe źródło tych problemów z wydajnością, np. użyłeś profilera, przy czym przeanalizowałeś timingi (poprawnie), czy tylko tak sobie mówisz, że gorzej działa?

[quote=”JakubEG, post:15, topic:13478”]
że u mnie na pojedynczym serwerze
[/quote]

[quote=”Nieznajomy11, post:11, topic:13478”]
Z drugiej strony patrząc na jakość wszelkich testów porównawczych wydajności w Minecraft robionych przez “administratorów serwerów”, to 99% z tych testów nie ma prawa bytu, bo nie są realnym testem, serwer Minecraft ciągle się zmienia i odtworzenie tego samego stanu do porównania wydajności (szczególnie gdy mówimy o graczach, którzy grają w konkretnych miejscach na serwerze i robią konkretne rzeczy, konkretny stan tick loopu) jest bardzo trudne, jak nie prawie niemożliwe.
[/quote]

Dodatkowo w sumie nie widziałem jeszcze serwera z ujemnym TPS.


aggankx | 2020-02-08 14:30:14 UTC | #17

Który z wymienionych przez Ciebie serwerów jest natywnie postawiony na 1.15.2? :thinking:

Ja na 1.13.2 i niższych nie miałem problemów z TPS


Nieznajomy11 | 2020-02-08 14:35:55 UTC | #18

Obecnie najwyższy wersją serwer jest na poważnie zmodyfikowanym paperze 1.15.1, czeka na update. Jest to serwer nazwany Anarchy, nie ma tam za dużo graczy, to trochę test czy to nie wybuchnie.

Generalne problemy z TPS występują zarówno na 1.8, jak i na 1.12, a o nowych wersjach nawet nie wspominam. Wszystko zależy od tego, co na tym serwerze się znajdzie, bo parę farm, trochę redstone i każdy serwer wymięka.

Wersje starsze potrafiły zazwyczaj działać na znośnym poziomie nawet z całkiem dużą ilością graczy, takie 1.15 już niekoniecznie, bo dotknęła je klątwa jeszcze bardziej zaśmieconego heapu i dlatego java 11 tutaj może aż tyle zmienić.


aggankx | 2020-02-08 14:37:26 UTC | #19

Jak już mówiłem, w moim wypadku wyrzuciła ta java serwer a gracze błagali żebym zmienił to co zmieniłem… (czyli przywrócił jave 8) [na paper’ze twierdzili że to nie wina javy, jednakże nie miałem nigdy takich problemów na 8 a po wgraniu 11 takie się zaczęły dziać]


JakubEG | 2020-02-08 14:36:38 UTC | #20

Nie ujemne TPS tylko to oznaczyłem że do 12 i mniej.. :seenoevil:


Nieznajomy11 | 2020-02-08 14:39:41 UTC | #21

[quote=”aggankx, post:19, topic:13478, full:true”]
Jak już mówiłem, w moim wypadku wyrzuciła ta java serwer a gracze błagali żebym zmienił to co zmieniłem…
[/quote]

Aktualizacja do javy 11 nie zawsze jest “plug-and-play”, wszystko zależy od wtyczek. Takie 1.8 to w ogóle nie obsługuje nowszych wersji niż java 8.

W moim przypadku było trochę rzeczy do zmiany, ale głównie w wielkim pluginie robiącym za api (bez którego duża część wtyczek nie odpali, ale to szczegół), pare unsafe rzeczy oraz do przekompilowania pod 11 jedna z zależności.

[quote=”JakubEG, post:20, topic:13478”]
Nie ujemne TPS tylko to oznaczyłem że do 12 i mniej… :seenoevil:
[/quote]

No co mogę powiedzieć, jakby było “poniżej 12” to byłoby bardziej zrozumiałe. :joy:


JakubEG | 2020-02-08 14:39:49 UTC | #22

U mnie nie ma problemu z TPS, problem był gdy chciałem sprawdzić jak będzie działać na 11.
U mnie każdy plugin działa (jak narazie) poprawnie, a o timingach mi nie mów bo nie mam serwera od wczoraj tylko już 5 rok :stuckouttongue:


Nieznajomy11 | 2020-02-08 14:41:17 UTC | #23

[quote=”JakubEG, post:22, topic:13478”]
U mnie nie ma problemu z TPS, problem był gdy chciałem sprawdzić jak będzie działać na 11.
[/quote]

Już zapytałem wcześniej, czy zdiagnozowałeś poprawnie przyczynę spadku wydajności, używając narzędzi do tego przeznaczonych? Tutaj jest naprawdę tyle zmiennych, że serwer jednego dnia może umierać, a drugiego mieć się świetnie.


JakubEG | 2020-02-08 14:41:35 UTC | #24

Tak jak wspominałem, najpewniej to przez pluginy, a ja w nich grzebać nie będę (w kodzie) bo najprościej się na tym nie znam, większość pluginów po prostu mam kupione.


JakubEG | 2020-02-08 14:42:16 UTC | #25

na java 8 działa świetnie dlatego przy niej zostaję, po co zmieniać jak działa :grin:


Nieznajomy11 | 2020-02-08 14:43:28 UTC | #26

Nie trzeba tutaj “grzebać w kodzie”. Profilowanie serwera polega na skorzystaniu najczęściej z gotowego programu i uzyskaniu dzięki temu łatwego dostępu do statystyk jvm, ich wizualizacji i przede wszystkim możliwości znalezienia “gorących rzeczy” dziejących się we wnętrznościach serwera.


JakubEG | 2020-02-08 14:44:30 UTC | #27

Wiem na czym polega profilowanie, ja mówię o pluginach które działają niepoprawnie na java 11 czy 13 a na 8 poprawnie…


Nieznajomy11 | 2020-02-08 14:47:57 UTC | #28

Nie rozchodzi się tutaj o poprawność, czy niepoprawność ich działania, tylko o znalezienie, co jest prawdziwą przyczyną spadku wydajności, zamiast narzekać, że java nowa zła, stara dobra.

Dodatkowo nic nie mówię, ale można prowadzić serwer przez tak długi czas a nadal nie potrafić zbyt wiele, jeśli chodzi o szczegóły działania jvm, bo nie jest to zwyczajnie wymagane, szczególnie korzystając z gotowych wtyczek (nie znaczy jednak, że nie jest to przydatne). Myślę, że byłbym w stanie wskazać takie osoby, bo jest ich naprawdę dużo.


JakubEG | 2020-02-08 14:53:20 UTC | #29

Dobra skoro jesteś najmądrzejszy to się udzielać nie będę ale skoro przykładowo autor pluginu informuje że jego wtyczka obsługuje tylko jave 8 to chyba znaczy że obsługuje tylko jave 8, i nie ja od tego jestem żeby szukać czemu ten plugin nie chce się przykładowo załadować gdy uruchamiam serwer na java 11 tylko autor powinien go przepisać tak aby działał na tej wersji java.
Miłego dnia.


Nieznajomy11 | 2020-02-08 14:59:20 UTC | #30

[quote=”JakubEG, post:29, topic:13478”]
Dobra skoro jesteś najmądrzejszy to się udzielać nie będę
[/quote]

Skąd tyle złości?
[quote=”JakubEG, post:29, topic:13478”]
plugin nie chce się przykładowo załadować gdy uruchamiam serwer na java 11
[/quote]

Mówiłeś o spadku wydajności, nie o tym, że jakieś wtyczki ci całkowicie nie działają na javie 11, to dwie - całkowicie różne sytuacje, wymagające całkowicie innych działań.

[quote=”JakubEG, post:29, topic:13478”]
skoro przykładowo autor pluginu informuje że jego wtyczka obsługuje tylko jave 8 to chyba znaczy że obsługuje tylko jave 8
[/quote]

To oznacza, że prawdopodobnie informuje, że pod tę wersję jest pisana, kompilowana i testowana, przy czym nie gwarantuje wsparcia nowszych wersji, nie znaczy to, że nie będą one działać na nowszych wersjach, dopóki nie ma bezpośredniej wzmianki o tej niekompatybilności.


krfcm | 2020-02-11 19:59:14 UTC | #31

Mógłbyś zrobić poradnik odnośnie używania profilera? :grin:


system | 2020-03-14 19:59:16 UTC | #32

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