Ошибка «java.lang.OutOfMemoryError: Java heap space» в консоли: причины и решение
Введение: когда память кончается
Ошибка «java.lang.OutOfMemoryError: Java heap space» в консоли означает, что Java-машина исчерпала выделенную ей оперативную память. Сервер крашится, игроки теряют прогресс. Эта ошибка — одна из самых частых причин внезапных падений сервера. В этом гайде я разберу, почему это происходит и как это исправить раз и навсегда.
Что такое Heap Space
Heap (куча) — это область памяти, которую Java использует для хранения объектов: чанков, мобов, предметов, данных игроков. Когда heap заполняется полностью, а Java не может освободить место — происходит краш.
Причина 1: Слишком мало выделенной памяти (-Xmx)
Диагностика: Посмотрите на скрипт запуска сервера. Если там -Xmx2G, а у вас 20 игроков и 30 плагинов — памяти не хватает.
Решение: Увеличьте -Xmx. Для сервера на 20 игроков с плагинами нужно минимум 4-6 ГБ. Для Forge с модами — 8-12 ГБ. Не выделяйте больше 80% от общей ОЗУ сервера.
Причина 2: Утечка памяти в плагине (Memory Leak)
Симптомы: Сервер работает нормально несколько часов, потом потребление памяти растёт и происходит краш. После перезапуска всё повторяется.
Диагностика: /spark health --memory покажет, какой плагин потребляет больше всего памяти. Если потребление плагина растёт со временем — это утечка.
Решение: Обновите проблемный плагин. Если обновлений нет — замените на альтернативу. Настройте автоматический перезапуск сервера раз в 12 часов для очистки памяти.
Причина 3: Слишком большой view-distance
Решение: Уменьшите view-distance в server.properties до 6-8. Каждый лишний чанк в памяти — это 2-5 МБ. При view-distance=10 и 20 игроках сервер держит в памяти тысячи чанков.
Причина 4: 32-битная Java
Диагностика: java -version — если там написано «32-bit», Java может использовать максимум 1.5 ГБ heap, даже если вы указали -Xmx8G.
Решение: Установите 64-битную Java.
💡 Совет профи
Используйте флаги Aikar для JVM. Они оптимизируют работу сборщика мусора и снижают риск OutOfMemoryError. Полный список флагов: -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.
💬 Комментарии (0)
🔒 Войдите, чтобы оставить комментарий
😊 Пока нет комментариев. Будьте первым!