Java zjadła mój wykupiony RAM, pomocy!

panel-v2
Tagi: #<Tag:0x00007f149f463560>

#1

Ten temat ciągnie się od początku jak tylko pamiętam.
Nie liczę ile razy oskarżano mnie o to że zarabiam na ich nieszczęściu (!)
Tymczasem ja po prostu wydzielam miejsce i RAM na hostach, nie jestem twórcą javy i nie mam większego wpływu na mechanizmy w niej zastosowane.

Moim zdaniem brakuje trochę świadomości jak działają aplikacje w javie.
Każdy właściciel serwera powinien znać przynajmniej podstawy, tak będzie lepiej dla niego samego oraz jego graczy (oraz moich nerwów ;))

Postaram się wytłumaczyć to w miarę prosto, pominę dużo technicznych szczegółów.
Jeśli ktoś chce podać bardziej szczegółową wersję wydarzeń pożerania RAMu przez javę, wystarczy napisać w tym wątku :slight_smile:

Przykładowe wiadomości klientów:

Powiększyliście mi ram o 1 gb i wyjaśnijcie mi czemu wcześniej pusty serwer zużywał 1 gb a teraz 2.5?!
Ogarnijcie to… zaczyna mnie to wkur… co mam powiększyć do 8? -.-

JVM - wirtualna maszyna javy zużyje tyle ile się jej da, tak aby aplikacja chodziła najszybciej jak się da.
Jednocześnie sam JVM zużyje też trochę RAMu dla siebie więc trochę MB z pakietu przepada na JVM.

W panelu klienta widzisz właśnie ile RAMu zjadł JVM, nie serwer Minecraft. To bardzo istotne!

i zaś jak przekroczę to wyłączycie serwer bo ta zasrana java żre ram tak?.. Ciekawe że wcześniej zabierała go mniej… to teraz nic dla graczy nie zostaje… ‘’ 21:11 RAM: 3072/3072 MB ‘’

Fakt zużycia całego RAMu przez JVM nie świadczy o tym że brakuje go dla graczy.
JVM rezerwuje tyle RAMu ile się da, potem wydziela go serwerowi Minecraft.
W panelu klienta może być pokazane full zużycia lecz w rzeczywistości sama aplikacja serwera Minecraft może mieć go trochę wolnego.

Tutaj warto skorzystać z pluginów które pokazują zużycie RAMu, tam można sprawdzić ile zostało wolnego RAMu.
Nawet jeśli jednak wolnego RAMu będzie mało to niekoniecznie będzie cierpieć na tym wydajność.

Jeśli chcemy sprawdzić wydajność serwera to należy używać jednostki TPS (Tick Per Second) w pluginach które oferują komendę /lag. Jeśli TPSy są ciągle poniżej 20, np. 15 to należy szukać problemu poprzez sprawdzenie timingów (wbudowane w silnik spigot)

Obserwując sytuację po wprowadzeniu javy 8 jako domyślnej mam wrażenie że nowsza wersja ma bardziej agresywne skłonności pochłaniania pamięci.
Jeśli zauważysz taką sytuację to przełącz po prostu javę na 7 w panelu i dokonaj restartu serwera.

Jeśli problem nadal występuje to spróbuj bardziej zoptymalizować serwer czyli wyrzucić zbędne pluginy, zmniejszyć render distance itp.

Jeśli mimo optymalizacji serwer nadal wyłącza się przez przekraczanie limitu RAM to należy wykupić większy pakiet. Najwidoczniej po prostu serwer potrzebuje więcej pamięci.

Inny wątek o podobnym temacie:


Pomoc z VPS pod Minecraft
Zużycie RAMu
Zarządzanie serwerem Minecraft od podstaw