Как выбрать VPS для игрового сервера: советы и критерии
Узнайте, почему для игрового сервера критически важна высокая частота одного ядра CPU и объем RAM. Разбираем вопросы локации, сетевых портов, настройки systemd и резервных копий.
Какой тип игрового VPS вы имеете в виду?
VPS для игровых серверов — это удачное приобретение для одной задачи: запуска выделенного сервера, к которому вы и ваши друзья подключаетесь со своих компьютеров. Это неудачный выбор для другой цели, которую часто подразумевают под этой фразой: запуск игры непосредственно на VPS через удаленный рабочий стол. Эти две задачи требуют противоположных характеристик оборудования. Выделенному серверу нужно одно быстрое ядро CPU и достаточное количество RAM для обработки игрового мира. Для игры нужен GPU (графический процессор), а стандартные тарифы VPS его не содержат.
Все, что описано ниже, относится к первой задаче. Вторая задача заслуживает двух минут вашего внимания, так как многие люди покупают для неё неподходящий сервер.
Почему на VPS нельзя играть в игры
Стандартный VPS предоставляет виртуальные ядра CPU и не имеет видеокарты. С физического хоста ничего не пробрасывается, поэтому для игры нет аппаратного рендерера. Вы можете проверить, что именно получили:
sudo apt install -y pciutils
lspci | grep -iE "vga|3d"Ответом будет виртуальный графический адаптер, например, Cirrus Logic или устройство virtio GPU. Он существует для того, чтобы веб-консоль провайдера могла отображать экран, и у него нет поддержки 3D-ускорения. Если установить графическую оболочку и VNC-сервер, glxinfo -B покажет в качестве рендерера llvmpipe — это программный рендерер Mesa, работающий на CPU. Современная 3D-игра, отрисовываемая процессором, выдает несколько кадров в секунду, поэтому она неиграбельна еще до того, как данные покинут сервер. Экземпляры Windows сталкиваются с той же проблемой с другой стороны. Многие игры завершаются при запуске с ошибкой создания устройства Direct3D, так как отсутствует графический адаптер для его инициализации.
Вторая проблема — путь сигнала до вас. Игра на удаленной машине означает, что каждый кадр кодируется в видеопоток, передается через интернет и декодируется на вашем экране. Это добавляет время на кодирование и декодирование к собственной задержке ввода игры, а протоколы RDP и VNC были разработаны для рабочих столов, а не для передачи 60 кадров в секунду. Облачные игровые сервисы решают эту задачу с помощью реального GPU-оборудования и специализированного протокола потоковой передачи. Обычный VPS не имеет ни того, ни другого. Если хотите играть — арендуйте GPU-мощности. Если хотите заниматься хостингом — читайте дальше.
Что на самом деле нужно выделенному игровому серверу
Игровой сервер представляет собой цикл симуляции. Он удерживает состояние мира в оперативной памяти и обновляет его фиксированное количество раз в секунду. Каждому подключенному игроку отправляется та часть мира, которую он может видеть.
Эти особенности определяют требования к аппаратному обеспечению. Цикл симуляции преимущественно однопоточный, поэтому тактовая частота ядра важнее количества ядер. Мир находится в оперативной памяти, поэтому объем RAM обычно становится первым ограничением. Дисковая подсистема почти не нагружается во время игры, но активно используется при загрузке и сохранении. Сетевой маршрут определяет пинг, и никакой тарифный план не способен его изменить.
Скорость одного ядра важнее количества ядер
Большинство игровых серверов обрабатывают состояние мира в одном основном потоке. Цикл тиков Minecraft и серверный кадр движка Source работают именно так. У этого тика есть ограничение по времени. Minecraft Java работает с частотой 20 тиков в секунду, что выделяет на каждый тик 50 миллисекунд. Когда сервер не укладывается в это время, он выводит следующее сообщение:
[12:04:51] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2547ms or 50 ticks behindЭта строка означает, что поток не успел выполнить задачу вовремя. Добавление ядер не дает этому потоку дополнительного времени. Тариф с 2 быстрыми vCPU будет поддерживать стабильную частоту тиков там, где тариф с 8 медленными vCPU начнет пропускать их, так как только одно из этих 8 ядер выполняет критически важную работу.
Оцените скорость одного потока перед тем, как выбрать тариф:
sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runИзучите строку events per second. Само по себе это число ничего не значит, оно полезно только для сравнения. Запустите тест на двух рассматриваемых тарифах и сопоставьте результаты. Полный цикл бенчмарков VPS описывает аналогичный подход для дисков и сети.
Дополнительные ядра всё же полезны. Они позволяют запустить второй игровой сервер, базу данных, ночное резервное копирование и предварительную генерацию чанков, не отнимая время у основного потока тиков. Серверное ПО также учится распределять нагрузку: например, Paper, популярный форк Minecraft, переносит часть задач с основного потока тиков. Поэтому оптимальный выбор — это несколько быстрых ядер, а не множество медленных.
На странице с описанием тарифа никогда не указывается один показатель, который определяет, действительно ли быстрое ядро, за которое вы заплатили, принадлежит вам:
vmstat 1 5Столбец st показывает процент времени, в течение которого ваш виртуальный CPU был готов к работе, но физический хост отдал ядро кому-то другому. Постоянное значение st выше нескольких процентов означает, что хост перепродан. Игроки будут ощущать это как «фризы», хотя top на вашем сервере будет показывать простаивающий CPU, так как это время простоя вам не принадлежит.
Сколько оперативной памяти нужно игровому серверу?
The data behind this chart
[
{
"label": "Minecraft Java, vanilla",
"players": 10,
"ram_gb": 2
},
{
"label": "Minecraft Java, large modpack",
"players": 10,
"ram_gb": 8
},
{
"label": "Valheim",
"players": 10,
"ram_gb": 4
},
{
"label": "Palworld",
"players": 32,
"ram_gb": 16
}
]Это начальные значения выделения памяти, которые указаны в документации к играм и модпакам по состоянию на август 2026 года. Это ориентировочные значения, а не показатели, измеренные на конкретном оборудовании. Ванильный Minecraft Java стабильно работает с 2 ГБ кучи (heap) примерно для 10 игроков. Такое же количество игроков в крупном модпаке потребует 8 ГБ, так как моды добавляют сущности и генерируемые структуры, которые размещаются в той же куче. Минимальные требования Valheim составляют 2 ГБ, однако операторы серверов с небольшим миром отмечают, что процесс потребляет около 3 ГБ, поэтому 4 ГБ — разумная точка для старта. Palworld является исключением: для максимального количества игроков 32 требуется 16 ГБ, что соответствует рекомендациям Pocketpair.
Потребление RAM не масштабируется линейно в зависимости от количества подключений. Оно зависит от загруженной части мира. Каждый игрок поддерживает загрузку области вокруг себя, поэтому два игрока, стоящие рядом, потребляют гораздо меньше ресурсов, чем два игрока, исследующие противоположные края карты. Именно поэтому «RAM на игрока» — лишь грубая оценка, а реальным фактором является «RAM на активную область». По этой причине небольшая группа игроков, любящих исследования, может превысить лимиты плана, рассчитанного на вдвое большее количество людей.
Для Java-серверов действуют два дополнительных правила. Установите минимальный и максимальный размер кучи одинаковыми, чтобы JVM не тратила ресурсы на изменение размера:
java -Xms4G -Xmx4G -jar server.jar noguiОставляйте запас памяти. JVM использует память вне выделенной вами кучи для стеков потоков и нативных буферов, а ядру требуется page cache для быстрого чтения файлов мира. На сервере с 6 ГБ RAM куча размером 4 ГБ — разумный выбор, а 6 ГБ — нет.
Два типа сбоев по памяти выглядят совершенно по-разному, поэтому научитесь их различать. Если куча слишком мала, Java выдает ошибку, и сервер обычно продолжает работать с перебоями:
java.lang.OutOfMemoryError: Java heap spaceЕсли размер кучи превышает объем доступной памяти, процесс принудительно завершается извне. В консоли отображается только Killed, а причина фиксируется в логе ядра:
sudo dmesg -T | grep -i "out of memory"Добавление swap предотвращает завершение процесса, но не решает проблему. Игровой цикл, вынужденный считывать данные мира из swap, пропускает все тайминги, поэтому вместо падения сервера игроки получат «зависания».
Примечание по версиям, актуальное на август 2026 года: Minecraft Java 1.20.5 и более поздние версии требуют Java 21. Более старая среда выполнения запускается, но затем выдает ошибку unsupported class file version. Она выглядит как сообщение компилятора и часто сбивает с толку при первой встрече.
sudo apt install -y openjdk-21-jre-headless
java -versionВажна ли скорость диска для игрового сервера?
Меньше, чем принято считать во время игрового процесса, но критически важна в двух конкретных случаях. Мир загружается в оперативную память при запуске и записывается обратно во время автосохранения, поэтому низкая скорость диска проявляется в виде долгой загрузки и пауз при сохранении. В остальное время большинство операций чтения выполняется из RAM.
Два фактора делают скорость диска более значимой, чем кажется на первый взгляд. Исследование мира приводит к загрузке новых чанков или зон с диска во время перемещения игроков, и это чтение происходит в рамках лимита времени на один тик. Автосохранение большого мира вызывает единовременную запись большого объема данных, и на медленном накопителе эта операция блокирует основной цикл сервера на время, достаточное для появления предупреждения "Can't keep up". В обоих случаях проблема заключается в задержках (latency), а не в пропускной способности, поэтому разница между NVMe и SATA SSD на VPS здесь важнее, чем заявленные мегабайты в секунду. Для вас имеет значение время выполнения одной небольшой операции.
Рассчитывайте объем диска с учетом роста. Размер мира увеличивается каждый раз, когда кто-то открывает новые области, а резервные копии умножают этот объем. Запускайте du -sh world раз в неделю в течение месяца, чтобы определить реальную скорость роста данных.
Tick rate, ping и разница между ними
Tick rate — это количество пересчетов состояния мира сервером в секунду. Minecraft Java работает на частоте 20. Серверы на движке Source обычно работают на 64. В Minecraft нельзя просто увеличить это значение, так как оно заложено в архитектуру игры, поэтому цель — поддерживать стабильные 20, а не превышать их.
Ping — это время прохождения сигнала от игрока до сервера и обратно. Эти два показателя вызывают разные проблемы, поэтому разделите их, прежде чем тратить деньги. Когда сервер пропускает тики, у всех игроков одновременно происходит «откат» (rubber-banding), а серверный лог прямо указывает на это. Когда у одного игрока длинный сетевой путь, задержки возникают только у него, а остальные работают нормально. Более мощный CPU никогда не решит проблему во втором случае.
Задержка зависит от местоположения, а не от тарифного плана
Свет в оптоволокне проходит около 200 километров за миллисекунду. Путь туда и обратно удваивает расстояние, поэтому минимально возможная задержка составляет примерно 1 мс на каждые 100 км между игроком и сервером. Ни один провайдер не может преодолеть этот предел, и смена тарифного плана на него не влияет.
The data behind this chart
[
{
"label": "Toronto to New York",
"distance_km": 550,
"rtt_floor_ms": 5.5
},
{
"label": "Dallas to Chicago",
"distance_km": 1290,
"rtt_floor_ms": 12.9
},
{
"label": "Dallas to Los Angeles",
"distance_km": 1990,
"rtt_floor_ms": 19.9
},
{
"label": "New York to London",
"distance_km": 5570,
"rtt_floor_ms": 55.7
},
{
"label": "Los Angeles to Sydney",
"distance_km": 12070,
"rtt_floor_ms": 120.7
}
]Это теоретические минимумы, рассчитанные по дуге большого круга. Реальные оптоволоконные линии не прокладываются по прямой, а каждый маршрутизатор на пути добавляет небольшую задержку, поэтому хороший результат в реальных условиях обычно примерно в два раза выше теоретического минимума. У игрока из Торонто, подключающегося к серверу в Нью-Йорке на расстоянии 550 км, минимальная задержка составляет 5.5 мс, а на практике она обычно будет в районе 10–20 мс. Для маршрута из Лос-Анджелеса в Сидней минимальная задержка составляет 120.7 мс, и никакие финансовые вложения не помогут её уменьшить.
Поэтому размещайте сервер ближе к пользователям. Если ваша группа распределена по разным континентам, кто-то неизбежно получит длинный маршрут, и справедливым решением обычно является выбор региона, где находится большинство игроков.
Измеряйте путь, а не гадайте:
sudo apt install -y mtr-tiny
mtr -rwzc 100 203.0.113.10Сначала смотрите на последнюю строку. Эта строка соответствует серверу, и именно её показатели потерь и задержки определяют качество игрового процесса. Потери на промежуточном узле при чистом конечном узле почти всегда означают ограничение скорости ICMP на данном маршрутизаторе, так как маршрутизаторы снижают приоритет ответов на проверочные пакеты, продолжая при этом нормально передавать основной трафик. Попросите каждого игрока выполнить трассировку до сервера, так как маршрут у каждого из них будет свой.
Как рассчитывается минимальная задержка (round trip floor)
Свет в стекле движется примерно со скоростью две трети от скорости в вакууме, что составляет около 200 км в миллисекунду. Путь туда и обратно удваивает расстояние, поэтому минимальная задержка в миллисекундах равна расстоянию в одну сторону в километрах, деленному на 100. Расстояние от Нью-Йорка до Лондона составляет 5 570 км, 5570 делим на 100 и получаем 55.7 мс. Любое измеренное значение будет выше этого, так как кабели прокладываются вдоль береговых линий, а маршрутизаторам требуется время на обработку пакетов.
Открывайте только те порты, которые необходимы игре
Игровому серверу требуется один или два открытых порта, не более. Стандартные значения:
- Minecraft Java Edition: TCP 25565
- Minecraft Bedrock Edition: UDP 19132
- Valheim: UDP 2456 и UDP 2457
- Palworld: UDP 8211
- Игры на движке Source, такие как Counter-Strike 2: UDP 27015
Ознакомьтесь с документацией к конкретной игре, так как многие проекты используют дополнительный порт для запросов. Valheim — самый наглядный пример: порт 2456 передает игровой трафик, а 2457 отвечает на запросы Steam, благодаря которым сервер отображается в списке браузера. Открытие этих портов по протоколу TCP не даст результата, так как Valheim работает только через UDP.
Разрешите SSH до включения межсетевого экрана, иначе вы потеряете доступ к собственному серверу:
sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw enable
sudo ufw status verboseМногие провайдеры также используют сетевой экран в панели управления, отдельный от того, что настроен внутри системы. Если порт открыт в ufw, но закрыт на уровне провайдера, соединения будут отклоняться. Симптомы при этом идентичны, поэтому проверяйте оба места, прежде чем приступать к редактированию конфигурационных файлов.
Проверить TCP-порт с другой машины просто:
sudo apt install -y netcat-openbsd
nc -vz 203.0.113.10 25565UDP нельзя протестировать таким способом. Закрытый UDP-порт обычно не подает признаков жизни, поэтому отсутствие ответа на запрос не дает никакой информации. Вместо этого выполните проверку на стороне сервера и убедитесь, что игровой процесс привязан к нужному порту:
sudo ss -lunp | grep 2456Никогда не открывайте RCON (протокол удаленной консоли) для доступа из Интернета. Это пароль, передаваемый в открытом виде, стандартный порт — 25575. Привяжите его к 127.0.0.1 и подключайтесь через SSH-туннель. Запускайте игровой сервер от имени отдельного непривилегированного пользователя, чтобы ошибка в модификации не позволила получить доступ к остальной системе. В статье Первые десять минут на новом VPS описаны создание учетной записи и базовая настройка безопасности SSH, которые, как предполагается в этом разделе, вы уже выполнили.
Запуск сервера через systemd для автоматического перезапуска
Сервер, запущенный вручную в сессии SSH, завершает работу при закрытии сессии и не запускается после перезагрузки системы. systemd решает обе эти проблемы. Создайте /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft Java server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar server.jar nogui
Restart=on-failure
RestartSec=15
TimeoutStopSec=180
[Install]
WantedBy=multi-user.targetRestart=on-failure возвращает сервер в рабочее состояние после сбоя и оставляет его выключенным после штатного завершения работы, что и требуется. Restart=always будет мешать вам каждый раз, когда вы намеренно останавливаете сервер. TimeoutStopSec=180 важнее, чем кажется на первый взгляд. systemctl stop отправляет сигнал SIGTERM, стандартный сервер Minecraft перехватывает этот сигнал, сохраняет мир перед выходом, а по истечении времени ожидания systemd отправляет SIGKILL. Сохранение большого мира может занять больше стандартных 90 секунд, и все данные, не успевшие записаться на диск к моменту получения SIGKILL, будут потеряны.
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo journalctl -u minecraft -fУспешный запуск завершается строкой вида Done (12.345s)! For help, type "help". Если юнит постоянно переключается между состояниями activating и failed, journalctl -u minecraft -n 50 содержит причину ошибки; обычно это неверный путь в WorkingDirectory или размер кучи (heap), превышающий объем оперативной памяти сервера.
systemd не предоставляет интерактивную консоль, поэтому предусмотрите это заранее. Используйте RCON на localhost для ввода команд или запускайте сервер внутри сессии tmux — это та же привычка, которая позволяет поддерживать активной длительную сессию Claude Code на VPS между входами в систему.
Играм, распространяемым через Steam, перед всеми этими действиями требуется SteamCMD. Пакет для Ubuntu представляет собой 32-битный бинарный файл, поэтому в конфигурации присутствует строка с архитектурой. Пропустите эту строку, и apt сообщит об отсутствии кандидата на установку:
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y steamcmdНекоторые игровые серверы увеличивают потребление памяти по мере работы, и запланированная перезагрузка в часы низкой нагрузки является общепринятым обходным решением, а не исправлением. Таймер systemd, вызывающий systemctl restart, проще в настройке, чем запись в cron, поскольку systemctl list-timers точно показывает, когда он сработает в следующий раз.
Регулярное резервное копирование игрового мира
На игровом сервере всё подлежит восстановлению, кроме директории с миром и данных игроков. Переустановка игры занимает минуты. Восстановление того, что построила ваша группа, может занять месяцы.
Безопасная резервная копия — это та, которая создана в момент отсутствия операций записи. Остановка сервера на одну минуту — самый простой способ гарантировать это:
sudo systemctl stop minecraft
sudo tar czf /var/backups/mc-$(date +%F).tgz -C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraftЕсли ночная пауза недопустима, сначала выполните принудительную запись мира на диск. В консоли Minecraft команда save-off отключает автосохранение, save-all flush записывает все ожидающие данные, а save-on включает автосохранение обратно после завершения копирования. Копирование мира во время записи может привести к тому, что файл региона окажется записан лишь частично, и вы узнаете об этом только в день, когда потребуется восстановление.
Храните хотя бы одну копию вне сервера. Резервная копия на том же диске не переживет выход диска из строя, а снапшот от провайдера — это удобство, а не полноценная резервная копия, так как он привязан к той же учетной записи, которую вы можете потерять. Настройка регулярного резервного копирования через restic в удаленное хранилище позволяет управлять хранением и дедупликацией, поэтому месяц ежедневных копий мира не переполнит ваш диск.
Затем выполните восстановление. Резервная копия, которую вы никогда не восстанавливали, — это лишь предположение. Распакуйте вчерашний архив в отдельную директорию, укажите на неё тестовый сервер и убедитесь, что мир загружается, а постройки находятся на своих местах.
Проверьте сервер перед покупкой
Приобретите подписку на один месяц, а не на год, и протестируйте сервер с реальными игроками в течение одного вечера. Запустите тест производительности одного потока sysbench, а затем попросите каждого игрока выполнить mtr в сторону сервера. В статье Полная процедура тестирования VPS описаны эти инструменты и приведены примеры плохих результатов, а материал Сколько на самом деле стоит VPS в месяц поможет убедиться, что вы платите за ресурс, который ограничивает ваш сервер, а не за тот, что указан самым крупным шрифтом в тарифном плане.
Две следующие статьи продолжают эту тему. Создание сервера Minecraft на VPS — это пошаговое руководство по всему вышеописанному на примере игры, с которой начинает большинство пользователей. Широкий спектр задач для VPS стоит прочитать, если вы хотите, чтобы сервер выполнял полезные функции в перерывах между игровыми сессиями.
FAQ
Можно ли играть в игры на VPS вместо покупки игрового ПК?
Нет. Стандартный VPS не имеет GPU, только виртуальный видеоадаптер для консоли провайдера. Поэтому после установки графической оболочки glxinfo -B сообщает об использовании программного рендерера llvmpipe, и 3D-игры работают с частотой в несколько кадров в секунду. Даже при наличии GPU удалённая игра добавляет задержки на кодирование и декодирование каждого кадра, а протоколы RDP и VNC для этого не предназначены. VPS предназначен для размещения выделенного сервера, к которому подключаются игроки. Если ваша цель — играть, арендуйте GPU или воспользуйтесь облачным игровым сервисом.
Сколько ядер CPU нужно игровому серверу?
Для большинства игр два быстрых ядра лучше, чем восемь медленных. Симуляция игрового мира выполняется в одном основном потоке, и дополнительные ядра не помогут этому потоку уложиться в лимит 50 мс. Сравнивайте тарифные планы с помощью sysbench cpu --cpu-max-prime=20000 --threads=1 run и ориентируйтесь на показатель событий в секунду. Дополнительные ядра оправданы, если вы запускаете на той же машине второй сервер или базу данных: тогда эти нагрузки не будут отнимать время у основного потока обработки тиков.
Сколько оперативной памяти нужно серверу Minecraft?
Примерно 2 ГБ heap-памяти для «ванильного» мира с 10 игроками и 8 ГБ для крупного набора модов при том же количестве игроков. Установите -Xms и -Xmx на одинаковые значения и оставьте 1–2 ГБ памяти свободными для операционной системы. JVM использует память вне heap, а ядру нужен page cache. Если размер heap превышает объём доступной памяти, ядро принудительно завершит процесс, что будет отражено в dmesg как ошибка нехватки памяти, а не как ошибка Java.
Почему у игроков лаги, если на сервере свободны CPU и RAM?
Этому есть две причины. Проверьте лог сервера на наличие Can't keep up! Is the server overloaded?: это означает, что основной поток не уложился в бюджет 50 мс на тик, пока остальные ядра простаивали. Если такой записи нет, проблема в сетевом маршруте. Попросите каждого игрока запустить mtr -rwzc 100 203.0.113.10 до адреса вашего сервера и изучите последнюю строку вывода. Также проверьте столбец st в vmstat 1: значение steal time выше нескольких процентов означает, что хост перепродан, и свободные ресурсы CPU, которые вы видите, на самом деле вам недоступны.
Какие порты нужно открыть для игрового сервера?
Только порт самой игры и порт SSH. Minecraft Java использует TCP 25565, Minecraft Bedrock — UDP 19132, Valheim — UDP 2456 и 2457, а Palworld — UDP 8211. Добавьте правило для SSH до запуска ufw enable, иначе вы потеряете доступ к серверу. Помните, что многие провайдеры используют дополнительный файрвол в панели управления: порт должен быть открыт и там, и в системе. Никогда не открывайте RCON на порту 25575 для доступа из Интернета, так как пароль передаётся в открытом виде.