Ошибка «Out of Memory» при генерации мира: краш при создании нового мира или полёте
Введение: генерация мира пожирает память
Ошибка «Out of Memory», возникающая именно при создании нового мира, исследовании новых территорий или полёте на элитрах — это особый случай нехватки памяти. Генерация чанков требует в 3-5 раз больше памяти, чем обычная работа сервера. Если ваш сервер стабильно работает с 10 игроками на базе, но крашится, когда кто-то летит исследовать мир — проблема в пиковом потреблении памяти при генерации. В этом гайде — как диагностировать и решить эту проблему.
Почему генерация мира требует так много памяти
При создании нового чанка сервер должен:
- Сгенерировать ландшафт (горы, пещеры, реки) с использованием сложных математических алгоритмов.
- Разместить руду, деревья, траву, цветы.
- Сгенерировать структуры (деревни, храмы, данжи) — это целые подпрограммы.
- Обработать водные потоки и лаву (жидкости требуют отдельного просчёта).
- Засветить чанк (движок освещения — один из самых тяжёлых компонентов).
Всё это происходит одновременно для десятков чанков, когда игрок летит на элитрах. Пиковое потребление памяти может быть на 2-4 ГБ выше обычного.
Симптомы
- Сервер крашится с «Out of Memory» именно когда кто-то исследует новые территории.
- В логах перед крашем много сообщений о генерации чанков.
- TPS резко падает при полёте игрока на элитрах.
- Ошибка воспроизводится: если тот же игрок снова летит в том же направлении — краш повторяется.
Решение 1: Предзагрузка чанков (Chunky)
Самое надёжное решение — сгенерировать мир заранее, в контролируемых условиях, без игроков.
- Установите плагин Chunky.
- Настройте радиус предзагрузки:
/chunky radius 5000(мир в радиусе 5000 блоков от спавна). - Запустите генерацию:
/chunky start. - Генерация будет идти медленно, потребляя память, но без риска краша (можно настроить паузы между чанками).
- Когда генерация завершена — игроки летают по уже готовому миру, память не скачет.
Решение 2: Увеличить память с запасом на пики
Если в обычном режиме сервер потребляет 3 ГБ, установите -Xmx с запасом в 2-3 ГБ на генерацию: -Xmx6G. Это не решит проблему полностью (генерация всегда может съесть больше), но снизит частоту крашей.
Решение 3: Ограничить скорость полёта / генерации
В файле paper.yml (раздел chunk-system) настройте:
chunk-loading:
autoconfig-send-distance: 6
enable-frustum-priority: true
global-max-chunk-load-rate: 100.0
player-max-concurrent-chunk-generates: 3
Параметр player-max-concurrent-chunk-generates: 3 ограничивает количество одновременно генерируемых чанков на одного игрока. По умолчанию может быть 10+ — это и вызывает пики.
Решение 4: Использовать Starlight (Fabric) или встроенный движок Paper
Движок освещения — главный потребитель памяти при генерации. Starlight (мод на Fabric) переписывает движок освещения, делая его в 26 раз быстрее и с меньшим потреблением памяти. Paper имеет встроенные улучшения освещения, но Starlight всё равно лучше. Если у вас Fabric-сервер — Starlight обязателен.
Решение 5: Выделить генерацию мира в отдельный поток (Folia)
Folia — это экспериментальное ядро от PaperMC, которое распределяет чанки по разным потокам CPU. Генерация чанка не блокирует основной поток сервера. Но Folia несовместима с большинством плагинов — это решение для ванильных или специально написанных серверов.
💡 Совет профи
Генерируйте мир на мощном локальном ПК, а потом переносите готовый мир на VDS. Локально вы можете выделить 12-16 ГБ памяти, сгенерировать мир радиусом 10 000 блоков за ночь, а затем загрузить папку world на сервер. Игроки будут исследовать уже сгенерированный мир, и потребление памяти будет минимальным. Это особенно полезно для серверов с модами, где генерация биомов — супер-тяжёлая.
💬 Комментарии (0)
🔒 Войдите, чтобы оставить комментарий
😊 Пока нет комментариев. Будьте первым!