FATAL ERROR: JavaScript heap out of memory
Skrypt zużył całą dostępną pamięć i zabrał ze sobą serwer. Coś jest trzymane i nigdy nie zwalniane.
Zrób najpierw to
Zanotuj, który zasób i jak długo serwer był uruchomiony. To trzeba porządnie znaleźć.
Co to znaczy
Zasób oparty o Node'a zużył więcej pamięci, niż pozwala V8, i środowisko przerwało działanie. Na FXServerze potrafi to pociągnąć za sobą cały serwer, bo środowisko JavaScriptu działa w tym samym procesie.
Co to powoduje
Uszeregowane według tego, jak często są odpowiedzią.
- 1
Wyciek — coś się gromadzi i nigdy nie jest czyszczone
Klasyk to obiekt per gracz dodawany przy wejściu i nigdy nieusuwany przy wyjściu. Przez godzinę wygląda dobrze, a umiera w szczycie.
- 2
Wczytywanie czegoś ogromnego do pamięci
Odczyt dużego pliku albo całej tabeli do tablicy naraz.
- 3
Nieograniczony cache
Mapa kluczowana czymś o nieograniczonej różnorodności, z której nic się nie usuwa.
- 4
Listener rejestrowany przy każdym zdarzeniu zamiast raz
Handlery odkładające się przy każdym wywołaniu.
- 5
Po prostu za mało pamięci na to obciążenie
Realna potrzeba większej sterty niż domyślna.
Jak poznać, który jest twój
Obserwuj proces przez godzinę. Pamięć, która rośnie i nigdy nie schodzi między szczytami populacji, to wyciek; pamięć, która skacze przy jednej konkretnej akcji, to ta akcja.
Gdzie szukać
Ta struktura, która rośnie: każde push, set i [key] = na obiekcie na poziomie modułu w zasobie, który padł.
Jak to naprawić
Sprzątaj przy rozłączeniu i ogranicz każdy cache:
on('playerDropped', (reason) => {
const src = global.source
delete playerState[src] // linia, o której ludzie zapominają
})Podniesienie sterty kupuje czas, nie naprawia wycieku:
# server.cfg — obejście, nie rozwiązanie set node_args "--max-old-space-size=4096"
Wciąż utknąłeś na własnym kodzie?
Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.
bug_reportOtwórz Server FixerDla tego rodzaju błędu Script Optimizer czyta skrypt i naprawia kod stojący za tym.