На этой странице
- Бюджет времени на тик
- Почему важны частота и кэш
- 3D V-Cache в Core 16X
- SMT и политика управления частотой
- Сколько серверов поместится на одной машине
- Защита от DDoS
- Выбирайте локацию по местонахождению игроков
- Настройка Linux с systemd
- LinuxGSM и панели управления
- LinuxGSM
- Панели в стиле Pterodactyl
- Резервное копирование
- Запуск на FlexDedi
Игровые серверы — необычная нагрузка. Их редко ограничивает суммарная мощность CPU, объём памяти или пропускная способность канала; ограничивает их то, насколько быстро один поток успевает обработать каждый тик симуляции. В этом руководстве разберём, что это означает для выбора оборудования, как оценить, сколько серверов поместится на одной машине, и как запускать их в Linux с разумной защитой и резервным копированием.
Бюджет времени на тик
Авторитарный игровой сервер (authoritative server) обновляет мир с фиксированной частотой. За каждый тик он обрабатывает ввод игроков, физику, ИИ и игровые правила, а затем отправляет состояние клиентам. Время, отведённое на один тик, считается простой арифметикой:
| Частота тиков | Время на тик |
|---|---|
| 20 Гц (Minecraft Java) | 50 мс |
| 30 Гц | 33,3 мс |
| 64 Гц | 15,6 мс |
| 128 Гц | 7,8 мс |
Когда тик не укладывается в бюджет, сервер начинает отставать, и это ощущает каждый игрок: персонажей откидывает назад (rubber-banding), попадания засчитываются с опозданием, а разрушенные блоки появляются снова. Дополнительные ядра не помогают, если работа выполняется в одном главном потоке, — а во многих движках так устроена значительная часть симуляции.
Почему важны частота и кэш
Производительность одного потока — это число инструкций за такт, умноженное на частоту. Все серверы FlexDedi построены на ядрах Zen 5, поэтому разница определяется частотами и кэшем: Core 16 работает в режиме Boost на частоте до 5,4 ГГц, а Core 16X — до 5,7 ГГц, тогда как серверы на EPYC 9005 — от 4,4 ГГц до 4,5 ГГц. Базовая частота тоже важна, потому что на плотно заполненном игровом хосте заняты все ядра: 4,3 ГГц у Core 16X и 3,0 ГГц у Core 16.
Кэш важен, потому что игровое состояние устроено нерегулярно. Сущности, чанки, физические тела и данные для поиска пути разбросаны по памяти, а попадание в L3 примерно на порядок быстрее обращения к DRAM. Если рабочий набор данных умещается в кэше, главный поток занят вычислениями, а не ожиданием.
3D V-Cache в Core 16X
В EPYC 4585PX, на котором построен Core 16X, поверх кристалла размещён дополнительный кэш L3 — в сумме 128 МБ против 64 МБ у EPYC 4545P в Core 16. 3D V-Cache создан именно для больших нерегулярных рабочих наборов, и игровая симуляция — один из таких случаев. Насколько он поможет, зависит от игры, карты и числа игроков, поэтому тестируйте свою игру, а не полагайтесь на допущения.
Кэш распределён неравномерно. 16-ядерный процессор Zen 5 состоит из двух 8-ядерных кристаллов (CCD) по 32 МБ L3 на каждом, а дополнительные 64 МБ находятся на одном из них: 96 МБ на одном CCD и 32 МБ на другом. Определите, какие логические CPU используют большой кэш:
for d in /sys/devices/system/cpu/cpu*/cache/index3; do
echo "$(cat "$d/size") $(cat "$d/shared_cpu_list")"
done | sort -uВы увидите две строки вида 98304K 0-7,16-23 и 32768K 8-15,24-31; нумерация на вашем сервере может отличаться. Привяжите самые требовательные серверы к CPU с большим кэшем. Некоторым играм частота важнее кэша, поэтому, прежде чем принять окончательное решение, сравните одну и ту же карту на каждой группе CPU.
SMT и политика управления частотой
Выделите главному потоку каждого сервера собственное физическое ядро; соседний SMT-поток того же ядра может обслуживать вспомогательные потоки. Кроме того, на bare metal вы сами управляете политикой частоты, к которой виртуальная машина доступа никогда не даёт. Проверьте драйвер и регулятор частоты (governor) и на чувствительных к задержкам хостах используйте performance:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governorПосле перезагрузки настройка сбрасывается, поэтому, чтобы она сохранялась, применяйте её небольшим юнитом systemd.
Сколько серверов поместится на одной машине
Честной универсальной цифры не существует. Всё зависит от игры, модов, размера карты, числа игроков и частоты тиков. Измерьте один экземпляр в пике нагрузки и посчитайте:
- Запустите один сервер с реалистичным числом игроков и зафиксируйте загрузку CPU главным потоком, резидентную память (RSS), объём записи на диск во время сохранений и сетевой трафик.
- Примените каждое ограничение из таблицы ниже и возьмите наименьший результат.
| Ограничение | Оценка |
|---|---|
| CPU | (физические ядра − ядра, зарезервированные под ОС, панель и резервное копирование) ÷ ядра на один экземпляр |
| Память | (RAM − запас под ОС и страничный кэш) ÷ пиковый RSS одного экземпляра |
| Сеть | (скорость порта × коэффициент запаса) ÷ (число игроков × трафик на одного игрока) |
| Диск | сколько сохранений может выполняться одновременно, не задерживая тики |
Пример с условными цифрами, а не с результатами измерений: каждому экземпляру нужно одно физическое ядро для главного потока, а в пике он занимает 8 ГБ RAM. На Core 16X, если зарезервировать 2 ядра и 32 ГБ, по CPU получается 14 экземпляров, а по памяти — (192 − 32) ÷ 8 = 20. Ограничивает CPU, поэтому рассчитывайте примерно на 14 экземпляров и проверьте это под реальной нагрузкой.
Несколько закономерностей справедливы для большинства игр:
- Постоянные миры-песочницы (игры о выживании, строительстве и управлении колонией) со временем занимают всё больше памяти, а их сохранения растут, поэтому повторяйте замеры раз в несколько недель.
- Серверы для матчей живут недолго и обычно расходуют мало памяти, поэтому предел задаёт CPU.
- Minecraft Java обрабатывает тики мира в одном главном потоке. Серверное ПО вроде Paper снижает стоимость тика, а
/msptили профилировщик spark показывают, насколько вы близки к бюджету в 50 мс. Задайте JVM фиксированный размер кучи (-Xmsравен-Xmx) по фактическому потреблению сервера, а не по всему объёму RAM, который у вас есть. - Сеть ограничивает редко: трафик одного игрока ничтожен по сравнению с портом 10 Гбит/с. Важнее интенсивность потока пакетов и трафик атак.
Защита от DDoS
Игровые серверы — частая мишень DDoS-атак. Для каждого IP-адреса FlexDedi включена постоянно активная защита от DDoS, поэтому трафик атак фильтруется без каких-либо действий с вашей стороны. Но базовая гигиена на самом хосте по-прежнему важна:
- Открывайте только те порты, которые нужны каждой игре, и только с нужным протоколом, например
ufw allow 25565/tcpилиufw allow 27015/udp. - Не выставляйте порты RCON, query и администрирования в публичный интернет: привязывайте их к
127.0.0.1или к частной сети. - Размещайте веб-панели за VPN или ограничивайте доступ к ним списком разрешённых IP-адресов и никогда не открывайте наружу базы данных, которые используют плагины или панели.
Выбирайте локацию по местонахождению игроков
Расстояние задаёт нижнюю границу задержки. Свет в оптоволокне проходит около 200 км за миллисекунду, поэтому каждые 1 000 км пути добавляют к времени отклика (RTT) не менее 10 мс. Для оценки: Даллас находится примерно в 2 000–2 200 км и от Лос-Анджелеса, и от Нью-Йорка, а значит, физический минимум RTT до любого из побережий — около 20–22 мс ещё до того, как добавится задержка маршрутизации.
Выбирайте локацию, ближайшую к основной массе ваших игроков: Нью-Йорк, Ашберн, Даллас или Лос-Анджелес в Северной Америке; Амстердам, Франкфурт или Лондон в Европе; Сингапур, Токио или Сидней в Азиатско-Тихоокеанском регионе. Core 16 и Core 16X доступны во всех десяти локациях. Прежде чем принять решение, запустите ping и traceroute до сетей ваших игроков из Looking Glass.
Настройка Linux с systemd
Начните с защищённой базовой конфигурации — например, по руководству о защите нового сервера Linux. Затем запускайте каждый игровой сервер от имени непривилегированного пользователя, из отдельного каталога и под управлением systemd. Один юнит-шаблон обслуживает множество экземпляров одной игры:
# /etc/systemd/system/minecraft@.service
[Unit]
Description=Minecraft server %i
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
WorkingDirectory=/srv/minecraft/%i
ExecStart=/usr/bin/java -Xms8G -Xmx8G -XX:+UseG1GC -jar server.jar --nogui
Restart=on-failure
RestartSec=10
SuccessExitStatus=0 143
TimeoutStopSec=90
CPUAffinity=0-7 16-23
Nice=-5
NoNewPrivileges=true
ProtectSystem=full
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsudo useradd --system --create-home --home-dir /srv/minecraft --shell /usr/sbin/nologin minecraft
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft@survival minecraft@creative
journalctl -u minecraft@survival -fКаждый экземпляр располагается в /srv/minecraft/NAME. При остановке systemd отправляет SIGTERM: сервер сохраняет мир, а JVM завершается с кодом 143, который SuccessExitStatus считает штатным. CPUAffinity привязывает экземпляры к найденным ранее CPU с большим кэшем. Чтобы перенести менее нагруженный экземпляр на другие CPU, выполните sudo systemctl edit minecraft@creative и добавьте пустую строку CPUAffinity=, а за ней — строку с новым списком: иначе настройка объединится со значением из шаблона. Интерактивной консоли systemd не предоставляет, поэтому администрируйте серверы через RCON с помощью клиента, например mcrcon.
LinuxGSM и панели управления
LinuxGSM
LinuxGSM — консольный менеджер для более чем 100 игровых серверов. Он устанавливает сервер, запускает его в tmux и добавляет мониторинг, обновления и резервное копирование. Для каждой игры создаётся отдельный пользователь:
sudo adduser vhserver
su - vhserver
curl -Lo linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh vhserver
./vhserver install
./vhserver start
./vhserver detailsvhserver — это Valheim; у каждой поддерживаемой игры своё короткое имя. Проект рекомендует запускать по cron команду monitor, которая перезапускает упавший сервер, и команду update:
*/5 * * * * /home/vhserver/vhserver monitor > /dev/null 2>&1
*/30 * * * * /home/vhserver/vhserver update > /dev/null 2>&1Панели в стиле Pterodactyl
Панели по образцу Pterodactyl, включая его форк Pelican, делят работу на две части: веб-панель с базой данных, в которой вы создаёте серверы и пользователей, и демон на каждом игровом хосте, который запускает каждый сервер в отдельном контейнере с ограничениями по CPU, памяти и диску. Они подходят для хостов, где много серверов или много людей, которые ими управляют. Для любой из таких панелей действует несколько правил:
- Разместите панель на небольшом отдельном сервере или ВМ и подключайтесь к игровым хостам по частной сети.
- Задайте лимиты CPU для каждого сервера и, если панель это поддерживает, закрепите потоки так, чтобы тяжёлые серверы работали на CPU с большим кэшем.
- Контейнеры публикуют порты через Docker, а он обходит UFW, поэтому управляйте доступностью портов через их распределение (allocations) в панели и через цепочку
DOCKER-USERв Docker.
Резервное копирование
Миры — то, что нельзя заменить. Делайте их резервные копии по расписанию, храните копии вне сервера и проверяйте восстановление:
- На время копирования приостанавливайте сохранение, чтобы файлы были согласованными. Для Minecraft отправьте через RCON
save-offиsave-all flush, скопируйте мир, затем отправьтеsave-on. Команда LinuxGSM./vhserver backupсоздаёт собственные архивы. - Передавайте копии на другой сервер с помощью restic или rsync. Сервер хранения данных в той же локации получает их по бесплатной частной сети, вторая локация защищает от инцидента на уровне всей площадки, а благодаря безлимитному трафику внешние копии не добавляют платы за передачу данных.
- Храните несколько поколений копий: повреждение мира может оставаться незамеченным несколько дней.
Запуск на FlexDedi
Для большинства задач игрового хостинга начните с Core 16X ($399/мес.): EPYC 4585PX с 3D V-Cache, базовая частота 4,3 ГГц и Boost до 5,7 ГГц, 192 ГБ DDR5 ECC и 2 × 3,84 ТБ NVMe. Core 16 ($299/мес.) подойдёт для менее требовательных игр и тестовых серверов. У обоих порты 10 Гбит/с с безлимитным трафиком и постоянно включённая защита от DDoS, оба доступны во всех 10 локациях и обычно готовы в течение 15 минут.
Если вы размещаете много небольших серверов вместе с панелями и базами данных, Pro 32 ($749/мес.) предлагает 32 ядра и 384 ГБ ценой меньшей скорости на ядро. Подробнее — на странице «Игровые серверы».
Другие руководства
Сравнение
Bare metal, VPS или облако: что выбрать?
Выбор сервера
Как выбрать выделенный сервер в 2026 году
Виртуализация