Ошибка Java Heap Space на сервере Minecraft: как диагностировать и исправить за 5 минут
Введение: самая частая ошибка серверов
Ошибка «java.lang.OutOfMemoryError: Java heap space» — это кошмар каждого администратора Minecraft-сервера. Сервер внезапно крашится, игроки теряют прогресс, а в консоли — пугающее сообщение о нехватке памяти. Эта ошибка возникает, когда Java-машина исчерпывает выделенную ей оперативную память. В 90% случаев проблема решается за 5 минут правильной настройкой параметров запуска. В этом гайде я разберу причины, диагностику и все способы исправления.
Что означает «Java heap space»
Heap (куча) — это область оперативной памяти, которую Java использует для хранения объектов. Когда Minecraft-сервер загружает чанки, мобов, предметы и плагины — всё это помещается в heap. Если heap заполняется полностью, а Java не может освободить место (сборщик мусора не справляется), происходит краш с ошибкой OutOfMemoryError.
Симптомы нехватки памяти
- Сервер работает, но с лагами (TPS падает ниже 15).
- В консоли появляются предупреждения: «Can't keep up! Is the server overloaded?»
- Перед крашем в логах есть строки: «java.lang.OutOfMemoryError: Java heap space».
- Сборщик мусора (GC) работает постоянно, потребляя CPU.
- После краша сервер автоматически перезапускается (если настроен авто-рестарт).
Причины ошибки
| Причина | Вероятность | Решение |
|---|---|---|
| Слишком мало выделенной памяти (-Xmx) | 70% | Увеличить -Xmx в параметрах запуска |
| Утечка памяти в плагине или моде | 15% | Найти проблемный плагин, обновить или удалить |
| Слишком большой view-distance | 10% | Уменьшить до 6-8 |
| Неправильные флаги GC (сборщика мусора) | 3% | Использовать оптимизированные флаги Aikar |
| Мировой файл повреждён или слишком большой | 2% | Оптимизировать мир, удалить ненужные чанки |
Шаг 1: Проверка текущих параметров памяти
В консоли сервера или в логах найдите строку запуска. Она выглядит примерно так:
java -Xmx2G -Xms1G -jar server.jar nogui
- -Xmx — максимальный размер heap. Если это 2G, а у вас 10 игроков и 20 плагинов — проблема здесь.
- -Xms — начальный размер heap. Рекомендуется устанавливать равным -Xmx для стабильности.
Шаг 2: Сколько памяти нужно серверу
| Тип сервера | Игроков | Минимальный -Xmx | Рекомендованный -Xmx |
|---|---|---|---|
| Vanilla (без плагинов) | 1-5 | 1 ГБ | 2 ГБ |
| Paper + 10 плагинов | 5-10 | 3 ГБ | 4-5 ГБ |
| Paper + 30 плагинов | 10-20 | 5 ГБ | 6-8 ГБ |
| Forge + 50 модов | 5-10 | 6 ГБ | 8-10 ГБ |
| Forge + 100+ модов | 5-10 | 8 ГБ | 10-12 ГБ |
Важно: не выделяйте серверу 100% ОЗУ вашего ПК/VDS. Оставьте 1-2 ГБ для операционной системы. Если у вас 8 ГБ ОЗУ — максимум для сервера 6 ГБ.
Шаг 3: Правильные флаги запуска (Aikar's Flags)
Обычный запуск java -Xmx4G -jar server.jar работает, но не оптимален. Используйте оптимизированные флаги от Aikar (разработчик Paper):
java -Xms4G -Xmx4G -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 server.jar nogui
Что делают эти флаги:
- G1GC — современный сборщик мусора, лучше стандартного Parallel GC.
- AlwaysPreTouch — предварительно выделяет память, ускоряет работу.
- DisableExplicitGC — запрещает плагинам вручную вызывать сборку мусора (экономит CPU).
- MaxGCPauseMillis=200 — ограничивает паузы сборщика мусора 200 мс (меньше лагов).
Шаг 4: Диагностика утечки памяти
Если вы увеличили -Xmx до 8 ГБ, но ошибка повторяется — вероятно, утечка памяти в плагине или моде.
Как найти виновника
- Установите плагин Spark:
/spark profiler start. - Дайте серверу поработать 10-15 минут под нагрузкой.
- Остановите профилирование:
/spark profiler stop. - Spark выдаст ссылку на веб-отчёт. Откройте её.
- В разделе «Memory» посмотрите, какие плагины/классы потребляют больше всего памяти.
- Обновите или удалите проблемный плагин.
Шаг 5: Оптимизация сервера
Снижение нагрузки на память
- Уменьшите view-distance в server.properties до 6-8. Каждый лишний чанк в памяти — это 2-5 МБ.
- Уменьшите simulation-distance до 4-6. Меньше мобов и ферм в активных чанках.
- Используйте Paper/Purpur вместо ванильного ядра — они оптимизируют использование памяти на 30-50%.
- Установите плагины оптимизации: Chunky (предзагрузка чанков), ClearLag (удаление мусора с земли).
- Ограничьте количество мобов в bukkit.yml:
spawn-limits.monsters: 30(по умолчанию 70).
Типичные ошибки администраторов
- Выделяют слишком много памяти. Если указать -Xmx16G на машине с 16 ГБ ОЗУ — система начнёт свопить на диск, и сервер будет лагать ещё сильнее.
- Используют 32-битную Java. 32-битная Java ограничена ~1.5 ГБ heap. Всегда используйте 64-битную Java.
- Игнорируют обновления Java. Java 8 на сервере 1.20+ работает нестабильно. Используйте Java 17 или 21 для современных версий.
- Не мониторят память. Команда
/memory(с плагином EssentialsX) или/spark healthпокажет текущее использование памяти.
💡 Совет профи
Настройте автоматический перезапуск сервера с очисткой памяти. Создайте скрипт restart.bat (Windows) или restart.sh (Linux), который при краше сервера автоматически запускает его снова через 10 секунд. На Linux используйте systemd-сервис с Restart=always. А с плагином ServerRestarter сервер будет перезагружаться планово раз в сутки (например, в 4 утра), очищая память и предотвращая накопление утечек.
💬 Комментарии (0)
🔒 Войдите, чтобы оставить комментарий
😊 Пока нет комментариев. Будьте первым!