Слоты - это число в файле конфига. Запись max-players=100 ничего не стоит и ничего не обещает. Реальный предел задаёт то, что кончится первым из четырёх ресурсов - память, бюджет тика, трафик или диск, - и что именно, зависит от игры и от того, чем заняты игроки. Тариф, заявленный как рассчитанный на сорок игроков, рассчитан на сорок игроков, делающих что-то конкретное, и это «что-то» почти никогда не оговаривается. В этой статье - как определить своё число, таблица реалистичных значений по играм и способ проверить его на практике, а не верить чьей-либо таблице, включая эту.
Слоты - это число в конфиге#
Каждая игра предоставляет максимальное число игроков, и его обеспечивает игра, а не железо. max-players в server.properties, MaxPlayers в Server.cfg Squad, sv_maxclients во FiveM, maxplayers в serverconfig.txt Terraria. Поставьте больше, и сервер примет столько подключений, но симулировать их он от этого не станет.
Что происходит, когда вы превышаете возможности железа, зависит от того, какой ресурс закончился, и отказывают они совершенно по-разному:
- Память кончается резко. Процесс убивают, или JVM начинает тратить на сборку мусора больше времени, чем на игру. Плавной деградации нет. На RE:NODE при достижении лимита памяти контейнер останавливается и перезапускается начисто, а не сбрасывает данные на диск: восстановление быстрее, но несохранённое состояние теряется - поэтому интервал сохранения важнее, чем принято думать.
- Бюджет тика кончается постепенно. Мир замедляется, или обновления приходят реже, ровно для всех. Ничего не падает. Просто становится хуже так, что никто не может указать пальцем.
- Трафик кончается выборочно. Первыми потери замечают игроки, дальше всех от сервера или на худших маршрутах.
- Диск кончается периодически. Сервер замирает на секунду при каждом сохранении, и замирание удлиняется по мере роста мира.
Только первый из этих пределов - то, на чём построена продажа большинства хостингов. А второй - то, во что упирается большинство серверов на самом деле.
Что кончается первым#
Память - это сумма загруженного мира, сущностей в нём и накладных расходов на подключение, которые обычно невелики. Часть на подключение действительно мала. Часть на загруженный мир - нет, и она зависит от того, где находятся игроки, а не от того, сколько их.
Бюджет тика - это 50 мс, 20 мс или 15,6 мс, которые есть у сервера на шаг. Каждый игрок добавляет работу: его движение нужно симулировать, его окружение поддерживать в тике, снимок состояния собрать и отправить. Это предел для большинства шутеров и для любого сервера Minecraft с активными игроками, и его измеряют, а не угадывают - как прочитать его в каждой игре, см. в статье что на самом деле означает tick rate.
Трафик - это размер снимка, умноженный на частоту тиков и на число игроков, в обе стороны. Он редко становится определяющим ограничением на современном канале, но кусает шутеры с высоким tick rate и большим числом игроков и любую игру, которая отправляет данные мира при подключении. Что на самом деле значит «безлимитный», разобрано в статье трафик и fair use.
Диск важен в момент сохранения. Игры, записывающие весь мир одной блокирующей операцией, ухудшаются по мере роста мира независимо от числа игроков - разве что при большем числе игроков исследуется больше мира. Именно об этой операции говорится в статье что на самом деле меняет NVMe.
Реалистичное число игроков по играм#
Пределы и значения по умолчанию меняются между версиями, так что читайте первый столбец как форму явления и подтверждайте его в собственном конфиге. Третий столбец - то, что хорошо настроенный сервер держит комфортно на арендованном железе, когда ничто не кажется неправильным.
| Игра | Предел и значение по умолчанию | Комфортно | Что кончается первым |
|---|---|---|---|
| Minecraft (Paper) | Предела движка нет, max-players=20 | 20-60 | Бюджет тика |
| Valheim | 10, зашито в коде | 10 | CPU, симуляция зон |
| Palworld | 32 | 16-32 | Память |
| Project Zomboid | Настраивается, обычно 32 | 16-32 | Память, затем CPU |
| 7 Days to Die | ServerMaxPlayerCount, по умолчанию 8 | 8-16 | Память |
| Terraria | Максимум 255, maxplayers=8 | 8-16 | CPU |
| Factorio | Предела нет | 10-30 | UPS |
| FiveM | 32 без OneSync, гораздо больше с ним | 32-64 | CPU и скрипты |
| Counter-Strike 2 | 10 в соревновательном, больше с переопределением | 10-24 | CPU |
| Counter-Strike 1.6 | 32 | 20-32 | Практически ничего |
| Team Fortress 2 | 32 у движка, 24 стандартно | 24 | CPU |
| Garry's Mod | 128, обычно -maxplayers 16 | 16-48 | Lua в основном потоке |
| Don't Starve Together | max_players, по умолчанию 6 | 6-16 | CPU |
| The Forest, Sons of the Forest | 8 | 8 | Память |
| Satisfactory | По умолчанию 4, настраивается | 4-8 | Память |
| Killing Floor 2 | 6 | 6 | CPU |
| Unturned | По умолчанию 24 | 16-24 | Память |
| BeamMP | MaxPlayers, по умолчанию 10 | 8-16 | CPU, физика |
| Euro Truck Simulator 2 Convoy | 8 | 8 | Ничего |
| Squad | 100, лицензионный диапазон 80-100 | 50-80 | CPU |
Из этой таблицы стоит выделить три закономерности.
Выживание и строительство упираются в память. Palworld, Project Zomboid, 7 Days to Die, игры серии Forest: каждый игрок исследует мир, а исследование загружает и удерживает мир. Вы покупаете именно память, и число растёт неделями после запуска, даже если число игроков не меняется. Разобранный пример - память сервера Palworld.
Шутеры упираются в CPU. Counter-Strike, Team Fortress 2, Squad и всё на Unreal крутят быстрый тик над небольшой статичной картой. Мир ничего не стоит держать и стоит очень много обновлять. Память почти не важна выше небольшого порога, а вся игра - в тактовой частоте; как это выглядит на 100 слотах, см. в статье хостинг сервера Squad.
Minecraft - и то, и другое, в соотношении, которое задаёте вы. view-distance и simulation-distance - это регулятор, который превращает давление на CPU в давление на память и обратно, поэтому в статье сколько RAM нужно серверу Minecraft приходится говорить о настройках, а не только о числе гигабайт.
Память на игрока непостоянна#
Вот ошибка, из-за которой получается большинство плохих расчётов. Берут общий объём памяти, делят на число игроков и считают результат стоимостью одного игрока. Это не так, потому что большая часть стоимости игрока - это мир, который он заставляет загрузить, а это целиком зависит от того, стоят ли игроки рядом друг с другом.
Minecraft делает арифметику наглядной. Игрок удерживает вокруг себя квадрат загруженных чанков со стороной 2 x view-distance + 1:
view-distance=10 -> 21 x 21 = 441 chunks per playerview-distance=8 -> 17 x 17 = 289 chunks per playerview-distance=6 -> 13 x 13 = 169 chunks per playerview-distance=4 -> 9 x 9 = 81 chunks per playerДесять игроков, стоящих в одном городе, делят почти все эти чанки: сервер может держать в сумме 600 чанков. Те же десять игроков, разбросанные по карте в 10 000 блоков, не делят ничего, и сервер держит 4410. То же число игроков, в семь раз больше загруженного мира, и рассчитывать нужно на второй случай, потому что именно так происходит на любом сервере, где люди по-настоящему играют.
Снижение view-distance с 10 до 6 убирает 62% чанков, которые держит загруженными каждый игрок. Одно это изменение обычно помогает испытывающему трудности серверу больше, чем удвоение памяти, а игрокам это стоит лишь части обзора, на которую они в основном и не смотрели. В Minecraft 1.18 и позже simulation-distance отделён и управляет тем, как далеко на самом деле тикают мобы, посевы и редстоун, - поставьте его меньше, чем view-distance, и вы сохраните обзор, сократив работу. Подробности есть в руководстве по оптимизации Paper.
Тот же принцип без аккуратной арифметики действует в каждой игре с открытым миром. Сосредоточенные игроки дёшевы. Разбросанные умножают загруженную площадь. А игроки-строители дороги навсегда, потому что построенное ими остаётся загруженным по соседству вечно, независимо от того, онлайн они или нет.
Бюджет тика на игрока#
Стоимость тика на игрока тоже не линейна, причём хуже, чем линейна, по двум причинам.
Первая - взаимодействие. Десять игроков в десяти разных местах порождают каждый свою работу. Десять игроков в одном месте порождают свою работу плюс стоимость того, чтобы сообщить каждому об остальных девяти, а эта часть растёт как квадрат размера группы. Поэтому сервер на 60 игроков в порядке, пока все не сходятся к одной цели, и поэтому худший кадр вечера всегда приходится на большую битву.
Вторая - то, что игроки приносят с собой. В большинстве игр игрок - это ещё и транспорт, база, ферма, дюжина брошенных предметов и питомец. Всё это тикает независимо от того, онлайн игрок или нет.
tick cost ~= base world + (players x their own surroundings) + (players in view of each other, squared) + everything anyone has ever builtПрактический вывод: вместимость падает за время жизни сервера. Сорок игроков, которым было комфортно в первую неделю, в шестой месяц на том же железе уже не чувствуют себя комфортно, потому что мир вырос под ними. Если в начале сервер работал хорошо, а теперь нет, то, скорее всего, изменилось не число игроков.
Трафик и когда он действительно предел#
Исходящий трафик - это примерно размер снимка, умноженный на частоту тиков и на число игроков, и это единственный ресурс, где арифметика проста:
32 players x 64 ticks/s x 200 bytes ~= 410 kB/s out, sustained64 players x 20 ticks/s x 500 bytes ~= 640 kB/s out, sustainedНа любом приличном соединении это небольшие числа, поэтому трафик редко становится ограничением. Где он всё-таки кусает:
- Всплески при входе. Игры, отправляющие данные мира при подключении - чанки Minecraft, весь сейв Factorio, загрузка модов, - резко всплескивают, когда после перезапуска заходит сразу несколько человек. Перезапуск в час пик - это событие для трафика.
- Голос. Встроенный проксимити-чат в играх на выживание и милсимах может превышать сам игровой трафик.
- Высокий тик при большом числе слотов. 128 тиков и 32 игрока - это действительно загруженный канал.
Безлимитный означает, что вы не платите за гигабайты. Это не значит, что можно бесконечно забивать общий канал, и это не меняет того, что переживает игрок на плохом маршруте.
Жёсткие пределы, которые не поднять#
Некоторые числа вообще не относятся к решениям о ресурсах. Valheim ограничен десятью игроками в коде; покупка памяти этого не меняет, а моды, поднимающие предел, поднимают ограничение, вокруг которого игру балансировали. The Forest и Sons of the Forest - восемь. Euro Truck Simulator 2 Convoy - восемь. Стандартные режимы Killing Floor 2 - шесть. У Satisfactory низкое значение по умолчанию, которое настраивается, но никогда не подбиралось под толпу.
Когда у игры жёсткий предел, вопрос о ресурсах ставится совсем иначе: вы спрашиваете не сколько игроков поместится, а сколько мира и сколько часов строительства породят эти фиксированные игроки. Сервер Valheim на десять игроков, проработавший год, требует больше, чем такой же сервер, запущенный вчера, а руководство по Valheim прямо объясняет почему: террафомирование хранится навсегда для каждого изменённого участка земли.
Как проверить по-настоящему#
Двадцать минут настоящего полного сервера скажут больше, чем любая таблица. Метод:
- Снимите базовый уровень. Перезапустите сервер, дайте ему пять минут отстояться без игроков и запишите память, CPU и tick rate. Это ваш пол.
- Заполните его теми, кого ожидаете. Не ботами и не стресс-инструментом, а настоящими игроками, делающими то, что они обычно делают. Боты стоят на месте и ничего не стоят, а игроки разбредаются.
- Наблюдайте двадцать минут. Память должна вырасти и выровняться. CPU должен вырасти и остаться ниже своего лимита. Tick rate должен держаться.
- Затем заставьте их сойтись. Объявите что-нибудь в одном месте и соберите всех там. Это худший случай, и он решает вашу реальную вместимость.
- Запишите четыре числа в худший момент. Пиковую память, пиковый CPU, самый низкий tick rate и число игроков в тот момент.
Как выглядит хорошо: память достигает пика около 75-80% лимита, CPU ниже потолка с запасом, tick rate на цели или рядом. Как выглядит полный сервер: память выше 90%, или CPU упирается в лимит, или tick rate заметно ниже цели во время схождения.
Живой график превращает это в работу на пять минут, а не в исследовательский проект. Панель RE:NODE рисует память, CPU и диск на фоне лимитов тарифа, так что пик можно просто посмотреть, а не измерять самому. Что означают формы графиков, разобрано в статье как читать график нагрузки сервера, а что с ними делать - в когда пора повышать тариф.
Очереди, зарезервированные слоты и честная реклама#
Когда вы знаете своё число, остаётся вопрос, что делать, если приходит больше людей.
- Очередь держит игроков вне сервера, пока не освободится слот. В Squad она встроена через
PublicQueueLimit; в большинстве игр нет, и добавление обычно означает прокси или плагин. Очередь превращает плохой опыт в ожидание, а это улучшение. - Зарезервированные слоты держат место для админов и участников. Заметьте, что в большинстве реализаций -
NumReservedSlotsв Squad тому ясный пример - зарезервированные слоты вычитаются из максимума, а не добавляются к нему. Сервер на 80 слотов с 4 зарезервированными - это публичный сервер на 76 слотов. - Рекламировать число, которое вы не можете удержать, - худший вариант и самый распространённый. Сервер, заявленный на 100 слотов и плохо играющий выше 60, теряет игроков навсегда; те, кто попробовал при 85, не придут проверять, стало ли лучше.
Неприятная формулировка: вместимость - это свойство вашего железа и вашей конфигурации, и снижать заявленное число бесплатно, а повышать железо - нет. Сервер на 40 слотов, который всегда хорош, каждый раз побеждает сервер на 100 слотов, на котором иногда невозможно играть.
Тарифы на RE:NODE указаны по памяти, диску, доле CPU и выделяемым портам, и переход между ними меняет лимиты уже существующего сервера, а не создаёт новый, - так что тест, показавший, что нужно больше, дёшево реализовать, и тест, показавший, что нужно меньше, тоже.
FAQ#
Можно ли просто поставить максимум игроков 100 и посмотреть, что будет?
Можно, и на небольшом тарифе будет либо убийство по памяти, либо падение tick rate вдвое, когда сервер действительно заполнится. Отказ наступит в худший момент - в тот вечер, когда вы наконец собрали 100 человек. Проверьте на числе, которое можете удержать, а потом повышайте.
Нужен ли каждому игроку фиксированный объём RAM?
Нет, и правило «на игрока столько-то» - самая вводящая в заблуждение цифра в хостинге. Большая часть стоимости игрока - это мир, который он загружает вокруг себя, а он зависит от того, насколько игроки разбросаны. Десять игроков в одном городе могут стоить долю того, что стоят десять разбросанных.
Почему мой сервер тянет 30 игроков в шутере, а в игре на выживание только 10?
Разные пределы. У шутера небольшая статичная карта, и он тратит бюджет на быстрый тик. У игры на выживание огромный динамичный мир, и она тратит память на его удержание. Их рассчитывают по разным ресурсам, и числа несравнимы.
У сервера есть запас памяти, но при полной загрузке он лагает. Что покупать?
Пока ничего. Запас памяти при лагах означает, что предел - бюджет тика, поэтому исправление - делать меньше работы за тик: снизить дальность обзора или симуляции, сократить сущности, убрать скрипты по таймерам - или взять более быстрое ядро, а не больше гигабайт. Разбор - в статье CPU или RAM.
Сколько игроков вместит тариф на 4 ГБ?
Это целиком зависит от игры. 4 ГБ вмещают полный мир Valheim на десять игроков, сервер Minecraft на 20-40 игроков с разумной дальностью обзора, загруженный сервер Counter-Strike с запасом памяти и примерно никого на мир Palworld или 7 Days to Die с модами. Найдите свою игру в таблице выше, а не смотрите на объём памяти.
Поднимет ли больший тариф мой предел игроков?
Только там, где предел был ограничением ресурсов. Если игра зашивает максимум в код, как Valheim на десяти, никакой тариф его не изменит. Там, где предел задаёте вы, больший тариф повышает число, которое вы реально можете удержать, а это не то же самое, что число в конфиге.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.