RE:NODE

Ресурсы11 мин чтения

RAM для сервера 7 Days to Die: реальные цифры

Память сервера 7 Days to Die по размеру мира и числу игроков, ключи serverconfig.xml, которые на неё влияют, пики в Кровавую луну, строка лога, которая всё показывает, и когда перезапускать.

1 прочтений

Выделенному серверу 7 Days to Die нужно 8 ГБ памяти для Navezgane или случайного мира 6k на четырёх игроков, 10-12 ГБ для мира 8k на шесть-восемь игроков и 12-14 ГБ для мира 10k на восемь и более игроков, разбредшихся по карте. Моды-оверхолы добавляют сверху ещё 2-4 ГБ. Это пиковые цифры, и у пика есть дата: ночь орды, когда все игроки одновременно отбиваются от волны зомби, после недели роста памяти с последнего перезапуска. Две настройки, сильнее всего влияющие на память, - размер генерируемого мира и допустимая дальность обзора, и обе проще выставить правильно до того, как мир появится, чем после.

Что сервер 7 Days to Die держит в памяти#

7 Days to Die - это сервер на Unity, симулирующий воксельный мир, который игроки копают, застраивают и взрывают. Память складывается из четырёх частей.

  • Загруженные чанки. Мир хранится чанками, и сервер держит загруженными и активными чанки вокруг каждого игрока. Чем больше игроков и чем дальше они друг от друга, тем больше чанков; группа на одной базе загружает малую долю того, что загрузит та же группа, исследующая мир в четырёх направлениях.
  • Сущности. Зомби, животные, игроки, транспорт, выпавшие рюкзаки и мешки с лутом. Каждый зомби - это AI с поиском пути, а поиск пути в разрушаемом воксельном мире дорог по памяти и CPU.
  • Статические данные мира. Сгенерированный рельеф, расстановка POI, дорожная сеть, данные префабов для каждого здания, которое может появиться. В большем сгенерированном мире всего этого больше.
  • Dynamic mesh. Система, которая позволяет игрокам видеть далёкие POI и постройки игроков вместе с их повреждениями. Она кэширует меши для отслеживаемых областей и управляется параметром DynamicMeshEnabled и связанными с ним ключами.

Под всем этим находятся среда выполнения Unity и управляемая куча, и, как любой управляемой среде, ей нужно свободное место для сборки мусора. Сервер, живые данные которого заполняют контейнер, не оставляет сборщику места, и именно тогда начинаются подвисания - ещё до того, как что-то закончится.

RAM по размеру мира и числу игроков#

Мир и группаRAMvCPUПримечания
Navezgane или мир 6k, до 4 игроков8 GB2Минимум для комфортного сервера
Случайный мир 8k, 6-8 игроков10-12 GB2-3Типичный размер для сообщества
Мир 10k, 8+ игроков, разбрелись12-14 GB3Разброс важнее количества
Оверхолы (Darkness Falls и подобные)плюс 2-4 GBплюс 0.5-1Больше зомби, предметов и блоков
Генерация мира при первом запускепик выше всех этих значений-Разовый всплеск

7 Days to Die - одна из немногих игр, где 8 ГБ - это минимум, а не комфортная середина. Ниже этого сервер запустится и протянет тихий день, а потом упадёт в первую же ночь орды. В руководстве по настройкам сервера 7 Days to Die используются те же цифры и разобрана вся конфигурация.

Столбец с игроками честно показывает одну вещь, которая удивляет людей: значение ServerMaxPlayerCount по умолчанию - 8, и игра рассчитана на группы такого размера. Серверы побольше существуют и работают, но каждый дополнительный игрок, ушедший сам по себе, загружает ещё одну область чанков и запускает ещё один набор спавна зомби, поэтому после примерно десяти игроков память и CPU растут быстрее, чем линейно.

Настройки, влияющие на память#

Все это свойства в serverconfig.xml. Значения по умолчанию менялись от релиза к релизу, поэтому смотрите значения в своём файле, а не верьте любой таблице, включая эту.

serverconfig.xml
<property name="GameWorld"                       value="RWG"/><property name="WorldGenSize"                    value="8192"/><property name="WorldGenSeed"                    value="tuesday-group"/><property name="ServerMaxPlayerCount"            value="8"/><property name="ServerMaxAllowedViewDistance"    value="10"/><property name="MaxSpawnedZombies"               value="64"/><property name="MaxSpawnedAnimals"               value="50"/><property name="BloodMoonEnemyCount"             value="8"/><property name="DynamicMeshEnabled"              value="true"/><property name="DynamicMeshLandClaimOnly"        value="true"/><property name="DynamicMeshMaxItemCache"         value="3"/>
СвойствоТипичное значение по умолчаниюВлияние на память
WorldGenSize6144Размер случайного мира; больше - значит больше статических данных и больше места для исследования
ServerMaxAllowedViewDistance12Ограничивает дальность обзора каждого клиента в чанках; меньше - значит меньше загруженных чанков
MaxSpawnedZombies64Сколько зомби одновременно живо на всей карте
MaxSpawnedAnimals50Сколько животных одновременно живо
BloodMoonEnemyCount8Зомби орды на одного игрока одновременно в Кровавую луну
DynamicMeshEnabledtrueМеши далёких POI и построек; кэширование стоит памяти
DynamicMeshLandClaimOnlytrueОграничивает dynamic mesh областями с земельными претензиями
DynamicMeshMaxItemCache3Сколько элементов мешей держится в памяти

Две настройки, с которых стоит начать:

`ServerMaxAllowedViewDistance`. Диапазон - от 6 до 12, и это ограничение того, что может запросить любой клиент. Снижение с 12 до 10 или 8 уменьшает число чанков, которые сервер держит загруженными для каждого игрока, а в мире, полном тумана, деревьев и зданий, большинство игроков почти ничего не замечает. Это самая дешёвая экономия памяти в списке.

`WorldGenSize`. Мир 10k не просто больше: в нём больше городов, больше POI и больше дорог, а первая генерация длится так долго, что люди думают, будто сервер завис. Если ваша группа - четыре человека, мир 6k или 8k даст им с избытком мест для исследования и обойдётся заметно дешевле. Подбирайте мир под группу, а не под самое большое число в выпадающем списке. Размеры RWG, сиды и время генерации подробно описаны в статье генерация мира в 7 Days to Die.

Ночь орды - это нагрузочный тест#

По умолчанию каждый седьмой день Кровавая луна посылает волны зомби на каждого игрока. BloodMoonEnemyCount - сколько их одновременно живо на одного игрока, поэтому восемь игроков при значении по умолчанию означают 64 зомби орды, прокладывающих путь к восьми точкам, часто сквозь построенную игроками оборону, которая рушится и пересчитывается на ходу. Сверху добавляются обычный спавн, загруженные чанки вокруг каждой базы и запись повреждений блоков.

Этот вечер - пик и для памяти, и для CPU, и приходится он на конец недели равномерного роста с последнего перезапуска. Пережить его помогают три привычки:

  1. Перезапускайте перед ночью орды, а не после. Перезапуск днём седьмого дня возвращает сервер к базовому уровню прямо перед самым тяжёлым часом. Выбор времени и предупреждение игроков описаны в статье расписания перезапусков, которые помогают.
  2. Сражайтесь в меньшем числе мест. Четыре отдельные базы для орды - это четыре отдельные задачи поиска пути и четыре набора загруженных чанков. Две общие базы - вдвое меньше.
  3. Не повышайте `BloodMoonEnemyCount` для большой группы. Значение задаётся на игрока. Сервер на двенадцать игроков при значении 8 - это уже 96 зомби одновременно; сложность определяется количеством на базу, а не на игрока.

Настройки орды и их цена подробнее разобраны в статье Кровавая луна и производительность.

Строка лога, которая говорит правду#

Сервер 7 Days to Die примерно раз в минуту пишет в лог строку статуса. Она выглядит так, а точный набор полей немного различается между версиями:

code
Time: 412.03m FPS: 38.21 Heap: 3215.4MB Max: 4120.7MB Chunks: 612 CGO: 74 Ply: 6 Zom: 41 Ent: 63 (112) Items: 0 CO: 6 RSS: 9874.2MB

Поля, которые стоит читать:

  • `FPS` - частота симуляции сервера. Это CPU, а не память. Устойчивые значения ниже примерно 20 - порог, за которым игроки замечают телепортирующихся зомби.
  • `Heap` и `Max` - используемая управляемая куча и её максимальный размер за всё время. Куча, которая днями ставит новые рекорды, - это рост или утечка.
  • `RSS` - резидентная память всего процесса, то самое число, которое на самом деле учитывает лимит контейнера. Сравните его с лимитом своего тарифа. Если RSS в конце ночи орды находится в пределах примерно 10% от лимита, вы в одном неудачном вечере от остановки.
  • `Chunks`, `Zom` и `Ent` показывают, что движет цифрами: загруженные чанки, живые зомби, сущности в целом.

Отфильтруйте эти строки в логе через grep, и у вас будет история памяти без каких-либо дополнительных инструментов. Команда mem в консоли администратора выводит похожую сводку по запросу и запускает сборку мусора, что помогает проверить, живые ли это данные или просто мусор, ожидающий сборки. Остальные команды консоли перечислены в статье команды администратора 7 Days to Die.

Генерация мира и папка сохранения#

Случайный мир генерируется при первом запуске с заданными именем, сидом и размером. Генерация строит рельеф, расставляет города и POI, прокладывает дороги и записывает результат в папку сгенерированных миров. Это тяжёлая разовая работа: память во время генерации может превышать то, что нужно готовому миру для работы, а мир 10k может генерироваться долго. На тарифе, которого хватает для работы мира, генерация всё равно может упасть.

Два способа это обойти:

  1. Генерируйте на тихом сервере, когда никто не подключён и больше ничего не запущено, и сделайте backup сразу после окончания.
  2. Генерируйте в игровом клиенте на своём компьютере с тем же именем, сидом и размером, а затем загрузите папку сгенерированного мира на сервер. Сервер найдёт её и пропустит генерацию.

После этого сохранение растёт по мере игры. Каждый регион мира - это файл .7rg в папке Region сохранения, и регионы, которые копали, застраивали или повреждали, несут эти данные. Файлы регионов хорошо исхоженного мира 10k могут достигать нескольких гигабайт - это диск, а не память, но их загрузка и сохранение входят в то, что сервер делает каждый раз, когда игрок переходит в новую область.

Моды: модлеты и оверхолы#

Моды для 7 Days to Die бывают от модлетов из одного файла, меняющих один рецепт, до полных оверхолов, заменяющих большую часть контента игры.

  • Модлеты, правящие XML - рецепты, лут, размер стаков, - почти ничего не стоят по памяти.
  • Контентные модлеты, добавляющие блоки, предметы или типы зомби, добавляют свои ассеты и свой спавн.
  • Оверхолы вроде Darkness Falls добавляют новые классы зомби, множество новых блоков и предметов, новые POI и изменённый спавн. По сути это другая игра с другими требованиями: добавьте 2-4 ГБ и половину ядра и ожидайте более медленного запуска.

Оверхолы выходят вслед за крупными версиями базовой игры с задержкой, поэтому проверьте, что устанавливаемая версия точно совпадает с версией игры на сервере; несовпадение обычно останавливает сервер при загрузке, а не расходует лишнюю память. Установка и синхронизация клиентов описаны в статье оверхолы на сервере.

Разбор на примере: шесть игроков в мире 8k#

Группа из шести хочет случайный мир 8k, количество зомби по умолчанию, один пак модлетов для удобства и Кровавую луну каждые семь дней. Таблица говорит: 10-12 ГБ. Вот как проверить это на реальных данных, а не верить таблице.

  1. Сначала генерация, потом расчёт. Сгенерируйте мир на тихом сервере или в клиенте и загрузите его, чтобы тариф не определялся всплеском при генерации.
  2. Запишите базовый уровень. Запустите сервер без игроков и через пять минут прочитайте RSS из строки статуса. На мире 8k это движок, статические данные мира и модлеты.
  3. Посмотрите обычный вечер. Когда все шестеро онлайн и разбрелись по карте, следите за RSS, Chunks и Zom в самый загруженный час. Разброс проявляется высоким значением Chunks.
  4. Посмотрите ночь орды. Те же поля в разгар Кровавой луны на седьмой день, без перезапуска перед ней, дают настоящий пик недели.
  5. Решите. Если этот пик ниже примерно 85% тарифа, всё помещается. Если близко, самые дешёвые решения - перезапуск перед ночью орды и ServerMaxAllowedViewDistance, сниженный на два. Если и этого не хватает, переходите на тариф выше.

Большинство групп такого состава спокойно укладываются в 10 ГБ с перезапуском перед ордой и в 12 ГБ без него. Разница между этими тарифами часто - одна задача в расписании.

Что происходит при достижении лимита#

Когда серверу 7 Days to Die внутри контейнера не хватает памяти, он не пишет в лог понятной ошибки. Процесс останавливается, лог обрывается посреди строки, и у вас остаётся то, что успело записаться в файлы регионов последним. Файлы регионов, пойманные посреди записи, - один из способов повредить сохранение 7 Days, поэтому привычка делать резервные копии в этой игре важнее, чем в большинстве других.

На RE:NODE сервер, достигший лимита памяти, останавливается и чисто перезапускается, а не уходит в swap; сервер 7 Days в swap всё равно непригоден для игры. Слоты backup входят в каждый тариф, а вкладка Schedules может запускать backup перед перезапуском накануне ночи орды. Тарифы 7 Days to Die начинаются с 8 ГБ от $20 в месяц и доходят до 14 ГБ, а логин Steam, нужный для установки, вводится на вкладке Setup. Переход на тариф выше поднимает лимит на уже существующем сервере, поэтому мир остаётся на месте.

FAQ#

Хватит ли серверу 7 Days to Die 8 ГБ?

Для Navezgane или случайного мира 6k на четырёх игроков - да. Для мира 8k на шесть-восемь игроков сервер работать будет, но в ночь орды в конце недели без перезапуска будет тесно. Ниже 8 ГБ запускать сервер не стоит.

Почему сервер 7 Days лагает в ночь орды?

Потому что ночь орды - пик и для памяти, и для CPU: десятки зомби одновременно прокладывают путь сквозь разрушаемые блоки к нескольким базам. Посмотрите на поле FPS в логе. Если оно проваливается, а RSS заметно ниже лимита, дело в CPU, и меньшее число баз для орды поможет больше, чем память. Если RSS близок к лимиту, перезапускайте перед следующей ордой.

Нужно ли большему миру больше RAM?

Да, сильнее, чем в большинстве игр. Больший случайный мир несёт больше статических данных и больше POI, а игроки разбредаются по нему дальше и загружают больше чанков. Мир 10k на четырёх игроков - это оплата карты, которую они никогда не посетят.

Сколько RAM нужно для Darkness Falls?

Закладывайте на 2-4 ГБ больше, чем нужно тому же миру в ванили, и ещё половину ядра. Оверхолы добавляют типы зомби, блоки и предметы и меняют спавн, поэтому поднимают и базовый уровень, и пик в ночь орды.

Помогает ли перезапуск с памятью в 7 Days to Die?

Да. Память растёт за дни аптайма, а перезапуск возвращает сервер к базовому уровню. Ставьте его перед ночью орды, а не после, чтобы самый тяжёлый час недели начинался с самой низкой точки.


Комментарии

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

0/2000