Как исправить ошибку Java при запуске сервера

Ошибки Java при запуске Minecraft-сервера на выделенном сервере Ubuntu (хостинг proxify.cloud) чаще всего связаны с отсутствием Java, несовместимой версией, неправильными параметрами памяти или некорректными правами доступа. Эта инструкция поможет вам диагностировать и исправить проблему шаг за шагом.

Все действия выполняются через SSH. Данные для подключения (IP, порт, логин, пароль) вы найдёте в панели proxify.cloud, разделе вашего сервера.

Шаг 1. Подключение к серверу

Откройте терминал (или используйте PuTTY / MobaXterm на Windows) и выполните:

ssh root@ваш_ip_адрес

Если вы сменили порт SSH, используйте ssh root@ваш_ip -p порт. После входа переходите к диагностике.

Шаг 2. Проверка установленной Java

Узнайте, установлена ли Java и какая версия используется по умолчанию:

java -version
which java

Пример вывода, если Java есть, но версия старая:

openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

Для современных версий Minecraft (1.17–1.20.4) нужна Java 17, а для версий 1.20.5+ – Java 21. Java 8 подходит только для очень старых сборок (до 1.16.5). Если вывод показывает java: command not found, переходите к установке.

Проверьте также, что используется 64-битная версия (строка 64-Bit в выводе). Если вы видите 32-Bit или i386, это может вызывать ошибки нехватки памяти.

Шаг 3. Установка подходящей версии Java

Для Minecraft 1.17–1.20.4 используйте OpenJDK 17:

apt update
apt install openjdk-17-jre-headless -y

Для версий 1.20.5+ (и новых сборок, требующих Java 21):

apt install openjdk-21-jre-headless -y

Если вы не уверены, установите обе версии и настройте переключение между ними (см. шаг 4). После установки проверьте версию:

java -version

Вы должны увидеть OpenJDK 17 или 21.

Если нужна конкретная версия (например, Java 16 или 11)

apt install openjdk-16-jre-headless -y

Для установки других версий добавьте репозиторий Adoptium или используйте SDKMan, но в большинстве случаев достаточно стандартного репозитория.

Шаг 4. Настройка переменных окружения и выбор версии Java по умолчанию

Если установлено несколько версий Java, укажите нужную с помощью update-alternatives:

update-alternatives --config java

Выберите номер строки с OpenJDK 17 или 21. Затем задайте переменную JAVA_HOME. Откройте /etc/environment:

nano /etc/environment

Добавьте строку (замените путь на реальный, его можно узнать командой dirname $(dirname $(readlink -f $(which java)))):

JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

Нажмите Ctrl+X, затем Y и Enter для сохранения. Чтобы применить без перезагрузки:

source /etc/environment
echo $JAVA_HOME

Также пропишите JAVA_HOME в скрипт запуска сервера (см. шаг 6).

Шаг 5. Проверка прав доступа и скрипта запуска

Перейдите в папку сервера (например, /home/minecraft/server) и убедитесь, что файл сервера (jar) исполняемый:

cd /home/minecraft/server
ls -la server.jar
chmod +x server.jar

Если вы загружали файлы из Windows, в скриптах могут быть символы \r\n. Исправьте командой:

sed -i 's/\r//' start.sh

Либо используйте dos2unix start.sh (установите пакет dos2unix, если он не установлен).

Проверьте, что файл eula.txt существует и содержит eula=true. Если его нет, создайте:

echo "eula=true" > eula.txt

Шаг 6. Настройка параметров запуска (скрипт start.sh)

Откройте скрипт запуска (обычно start.sh или run.sh):

nano start.sh

Убедитесь, что аргументы JVM заданы корректно. Пример для сервера с 4 ГБ ОЗУ:

#!/bin/bash
java -Xms1G -Xmx3G -jar server.jar nogui

Параметры:

  • -Xms – начальный размер кучи (например, 1G)
  • -Xmx – максимальный размер кучи (должен быть меньше доступной физической памяти, оставьте минимум 1–2 ГБ системе).

Если у вас небольшой объём памяти (2–3 ГБ), поставьте -Xms512M -Xmx2G. Не указывайте -Xms выше -Xmx.

Если сервер не запускается с ошибкой Error: Could not find or load main class, проверьте, что имя jar-файла совпадает (обычно server.jar, но может быть paper.jar или forge.jar).

Также укажите -Djava.awt.headless=true, если требуется.

Для диагностики добавьте флаг -verbose:gc – он выводит информацию о сборщике мусора.

Шаг 7. Запуск сервера и анализ ошибок

Выполните скрипт:

./start.sh

Если ошибка остаётся, запишите её точный текст. Ниже разобраны наиболее частые сообщения.

Частые ошибки и их решение:

"Unrecognized JVM option" или "Unrecognized VM option"

  • Используются неподдерживаемые параметры (например, -XX:UseG1GC в старой Java). Удалите или замените их.
  • Установите более новую версию Java.

"Error: Could not find or load main class"

  • Неверное имя jar-файла в скрипте.
  • Jar-файл повреждён или не является исполняемым. Скачайте заново.
  • Раскомментирован nogui при отсутствии -jar – убедитесь, что команда имеет вид java -jar server.jar nogui.

"Error occurred during initialization of VM" / "Could not reserve enough space for object heap"

  • Значение -Xmx превышает доступную физическую память или лимиты cgroups. Уменьшите -Xmx.
  • На 32-битной Java нельзя задать кучи более ~1.5 ГБ. Переустановите 64-битную версию.
  • Проверьте свободную память командой free -h.

"java.lang.OutOfMemoryError: Java heap space"

  • Не хватает выделенной кучи. Увеличьте -Xmx, но не более доступной памяти.
  • Используйте флаг -XX:+UseG1GC (только для Java 11+).

"java.net.BindException: Address already in use"

  • Порт (по умолчанию 25565) уже занят. Убейте старый процесс: kill -9 $(lsof -ti:25565) или укажите другой порт в server.properties.

"Exception in thread "main" java.lang.UnsupportedClassVersionError"

  • Версия Java слишком старая для этого jar. Обновите Java до версии, требуемой сборкой (проверьте документацию сервера).

Шаг 8. Повторный запуск и проверка

После исправлений запустите сервер снова. Убедитесь, что процесс работает:

ps aux | grep java