Выделенному серверу Project Zomboid нужно около 3 ГБ памяти на двух-четырёх игроков в одном городе с ванильными настройками, 4-6 ГБ на восемь-шестнадцать игроков, разбредшихся по карте, и 8-10 ГБ на шестнадцать-тридцать два игрока с модами из мастерской и модами карт. Поскольку сервер - программа на Java, тариф - лишь половина ответа: Java heap, задаваемый через -Xmx, должен составлять примерно 70-80 процентов тарифа, чтобы вокруг него поместилась остальная часть процесса. Выберете правильный тариф, но неправильный heap - и сервер будет остановлен за нехватку памяти, пока Java всё ещё считает, что место есть. Главный фактор после этого - не число игроков, а их разброс: четверо игроков в четырёх городах стоят дороже, чем десять в одном.
Что сервер Zomboid держит в памяти#
Сервер обсчитывает весь мир для каждого игрока, и его память складывается из четырёх вещей.
- Загруженные клетки карты и чанки вокруг каждого игрока. Карта - это сетка клеток, и сервер держит загруженной область вокруг каждого подключённого игрока: здания, мебель, контейнеры, предметы на полу, транспорт и зомби в этой области. Игроки в одном городе делят одну загруженную область. Игроки, разбросанные по Малдро, Риверсайду и Луисвиллю, загружают три.
- Зомби. Популяция зомби отслеживается по всей карте, а зомби рядом с игроками симулируются полностью. Настройки популяции определяют, сколько их существует; сколько активно одновременно, зависит от числа загруженных областей.
- Предметы и транспорт. Каждый предмет в загруженном контейнере или на полу, каждая машина с её деталями и содержимым багажника. Игроки копят, а база с тридцатью забитыми ящиками и стоянкой разграбленных машин - это очень много объектов.
- Моды. Lua-скрипты, определения предметов, текстуры для собственного учёта сервера, а у модов карт - целые дополнительные регионы клеток.
Всё это находится в Java heap, кроме собственных накладных расходов JVM, которые лежат за его пределами, - именно поэтому heap должен быть меньше тарифа.
RAM по группе и типу сервера#
| Сервер | Память тарифа | -Xmx | Примечания |
|---|---|---|---|
| 2-4 игрока, ваниль, один город | 3 GB | 2g | Комфортно |
| 8-16 игроков, разбрелись | 4-6 GB | 3g - 4g | Типичный случай |
| 16-32 игрока, моды и моды карт | 8-10 GB | 6g - 7g | Дорогая часть - моды карт |
| Много модов, 100+ предметов из мастерской | 10 GB и больше | 7g - 8g | Проверьте список модов до запуска |
Читайте таблицу по тому, где будут игроки, а не только по их количеству. Небольшой приватной группе, которая вся живёт в одном укреплении, нужна первая строка, даже если в ней восемь человек. Сообществу из двенадцати, где каждый занимает свой город, нужна третья - ещё до установки каких-либо модов.
Как правильно задать Java heap#
Сервер запускается Java-лаунчером, который читает аргументы JVM из JSON-файла в папке сервера - ProjectZomboid64.json на 64-битных установках. Heap - это записи -Xms и -Xmx в его списке vmArgs:
{ "mainClass": "zombie/network/GameServer", "classpath": ["."], "vmArgs": [ "-Djava.awt.headless=true", "-Xms2g", "-Xmx4g" ]}В настоящем файле аргументов больше, в том числе параметры сборщика мусора, которые различаются между сборками игры. Меняйте только две строки heap, а остальное оставьте как есть. В пакетном лаунчере для Windows те же два флага находятся в StartServer64.bat. На хостинге с панелью heap часто вынесен в переменную на вкладке Startup; если так, пользуйтесь ею, а не правьте файл, потому что панель может перезаписать файл при переустановке.
Что означают два флага:
- `-Xmx` - максимальный размер heap. Именно это число важно.
- `-Xms` - начальный размер heap. Скромное начальное значение подойдёт; если сделать его равным
-Xmx, JVM заберёт всё сразу, что безвредно при правильном максимуме и делает график памяти понятнее.
Правило для максимума то же, что для любого сервера на JVM: оставляйте место вне heap. Metaspace для загруженных классов, стеки потоков, кэш кода JIT-компилятора и нативные буферы для сети - всё это считается в лимит контейнера, и ничто из этого не входит в -Xmx.
| Тариф | Разумный -Xmx | Остаётся вне heap |
|---|---|---|
| 3 GB | 2g | ~1 GB |
| 4 GB | 3g | ~1 GB |
| 6 GB | 4g - 4500m | ~1.5 GB |
| 8 GB | 6g | ~2 GB |
| 10 GB | 7g - 8g | ~2-3 GB |
Что увеличивает память без новых игроков#
Ряд настроек песочницы и сервера меняет память сильнее, чем добавление игрока. Они находятся в двух файлах, названных по имени вашего сервера, - по умолчанию servertest.ini и servertest_SandboxVars.lua в папке Zomboid/Server.
Популяция зомби
Zombies задаёт общий пресет популяции, а блок ZombieConfig уточняет его:
Zombies = 3,ZombieConfig = { PopulationMultiplier = 1.0, PopulationStartMultiplier = 1.0, PopulationPeakMultiplier = 1.5, PopulationPeakDay = 28, RespawnHours = 72.0,},Популяция напрямую масштабирует память и CPU. Обратите внимание на пик: при значениях по умолчанию плотность к 28-му дню растёт до полуторакратного стартового уровня, поэтому сервер, рассчитанный на третий день, на четвёртой неделе может оказаться мал, хотя никто ничего не менял. Рассчитывайте на пик. Важен и RespawnHours - респаун заново заполняет зачищенные города, поэтому зомби никогда не перестают стоить ресурсов. Значение 0 отключает респаун, и на многих мультиплеерных серверах это одновременно улучшение геймплея и медленное снижение нагрузки. Все параметры разобраны в статье разбор SandboxVars.
Предметы на полу
Игроки бросают вещи. За месяцы на сервере скапливается выброшенная одежда, пустые банки и сумки на каждой улице, по которой ходили люди. В ini сервера для этого есть очистка:
HoursForWorldItemRemoval=24.0WorldItemRemovalList=Base.Hat,Base.Glasses,Base.MaggotsItemRemovalListBlacklistToggle=falseHoursForWorldItemRemoval задаёт, сколько часов предмет должен пролежать на полу, прежде чем будет удалён (0 отключает очистку), а WorldItemRemovalList перечисляет типы предметов, к которым применяется правило. С ItemRemovalListBlacklistToggle=true список, наоборот, становится исключениями, и очищается всё, кроме перечисленных предметов. Это агрессивно и может удалить то, что игроки положили намеренно, поэтому объявите об этом до включения. Проверьте значения по умолчанию в своём файле: они менялись между сборками.
Транспорт
Каждая машина на карте - постоянный объект с деталями, состоянием и содержимым. CarSpawnRate в настройках песочницы задаёт, сколько машин появляется; сервер, где его ради забавы выставили высоко, в итоге получает стоянки в каждом городе, и все они загружаются, когда кто-то оказывается рядом. Игроки их ещё и коллекционируют. База с двадцатью машинами - это двадцать наборов содержимого багажников.
Моды и моды карт#
Моды Project Zomboid берутся из Steam Workshop и перечисляются в ini сервера по ID в мастерской и ID мода. Большинство стоит немного памяти: пак предметов или улучшение удобства - это горстка Lua-файлов и определений.
Моды карт - другое дело. Они добавляют в мир новые клетки - новые города, новые дороги, иногда целые новые регионы, - и в этих клетках, как и на базовой карте, есть здания, контейнеры и лут. Отсюда два следствия. Мир становится больше, поэтому игроки разбредаются дальше и загружают больше областей одновременно. А некоторые моды карт плотные, с большим числом контейнеров и предметов на здание, чем в ванильных городах. Третья строка таблицы расчёта существует в основном из-за модов карт.
Практические советы для сервера с модами:
- Добавляйте моды партиями и смотрите на память после каждой. Коллекцию из сотни предметов невозможно отладить, если серверу вдруг понадобилось на 2 ГБ больше.
- После любого изменения модов запустите сервер один раз без игроков и проверьте память в простое. Это новый базовый уровень.
- Держите список модов одинаковым на сервере и у клиентов. Несовпадения не дают игрокам зайти; памяти они не стоят, но стоят часов.
Строки ini и порядок загрузки описаны в статье моды Project Zomboid и мастерская.
Как доказать, что проблема в памяти#
У лагов в Zomboid две частые причины, и решаются они по-разному.
- Смотрите на график памяти в самый загруженный час. Пила JVM, которая растёт, падает после сборки и снова растёт, - это норма. Линия, прижатая к лимиту с небольшими провалами, означает, что heap слишком заполнен и сборщик много работает, чтобы освободить мало.
- Сравните с heap. Если процесс близок к лимиту контейнера, а heap не заполнен,
-Xmxслишком велик для тарифа, и за лимит выталкивает часть вне heap. Уменьшите-Xmx. - Проверьте CPU отдельно. Орды зомби, много транспорта и разбредшиеся по карте игроки стоят ещё и времени главного потока. Откаты при памяти, спокойно стоящей ниже лимита, - это CPU. Метод описан в статье CPU или RAM: что тормозит ваш сервер, а причины, характерные для Zomboid, - в статье производительность и лаги Project Zomboid.
- Ищите закономерность в перезапусках. Сервер, который каждый вечер перезапускается в один и тот же загруженный час без записей в логе, упирается в память. Сервер, который перезапускается случайно с ошибками Java в логе, - это мод или повреждённое сохранение.
На RE:NODE сервер, достигший лимита памяти, останавливается и чисто перезапускается, а не уходит в swap. Поэтому слишком маленький heap сразу заметен - это резкий перезапуск, а не медленная деградация, - а график памяти в консоли точно показывает, насколько близко к лимиту подошёл каждый вечер.
Разбор на примере: двенадцать игроков перерастают 4 ГБ#
Группа из двенадцати запускает ванильный сервер на тарифе 4 ГБ с -Xmx3g. Первые две недели всё в порядке: большинство живёт в одном укреплении в Малдро и ходит за припасами вместе. На третьей неделе трое переезжают в Риверсайд, двое занимают ферму возле Роузвуда, и вечерние сессии начинают заканчиваться резкими перезапусками без записей в логе.
Разбираемся по порядку:
- Перезапуски - из-за памяти. В логе ничего, время - самый загруженный час, а график в панели показывает, что процесс упирается в линию 4 ГБ прямо перед каждым перезапуском. Это лимит контейнера, а не ошибка Java.
- Дело не только в heap. С
-Xmx3gheap может использовать только 3 ГБ, значит, дополнительное давление - это память вне heap плюс заполненный heap. Поднять-Xmxдо3500mна том же тарифе - значит сделать хуже, потому что это отнимет место у той части, которая и так выталкивает процесс за лимит. - Причина - разброс. Теперь каждый вечер загружаются три отдельные области вместо одной, каждая со своими зомби, контейнерами и транспортом, а популяция приближается к пику 28-го дня.
- Варианты. Перейти на тариф 6 ГБ с
-Xmx4500m, который спокойно вмещает разброс. Или оставить 4 ГБ и снизить нагрузку: уменьшитьPopulationPeakMultiplier, включить очистку предметов и договориться всей группой держать базы в одном-двух городах. Многие группы делают понемногу и того и другого. - Проверьте через неделю. Полезное число - пик во время самой загруженной вечерней сессии, уже после пика популяции. Если он ниже примерно 85% нового лимита, тариф выбран правильно.
Ситуация достаточно частая, чтобы закладывать её заранее. Сервер Zomboid, на котором будет больше восьми человек, стоит рассчитывать на неделю, когда группа разбредётся, а не на неделю, когда она пришла.
Диск и папка сохранения#
Отказывает память; растёт диск. Сохранение мультиплеерного мира лежит в Zomboid/Saves/Multiplayer/<servername>/, и в нём есть по файлу map_X_Y.bin на каждый чанк карты, где кто-нибудь побывал, плюс данные игроков и транспорта. Сервер, проработавший год на хорошо исхоженной карте, измеряется гигабайтами и сотнями тысяч мелких файлов. Его резервные копии по мере роста делаются всё дольше, а восстановление идёт медленнее, чем ожидают. Как сбросить часть карты, не стирая игроков, описано в статье сброс карты и мира Project Zomboid - это же честный способ уменьшить старое сохранение.
Тарифы Project Zomboid на RE:NODE начинаются с 3 ГБ и доходят до 10 ГБ, от $9 в месяц, с тремя выделенными портами. Для установки нужен логин Steam, который вводится на вкладке Setup, а переход на тариф выше поднимает лимит на уже существующем сервере без его пересоздания.
FAQ#
Хватит ли серверу Project Zomboid 4 ГБ?
Примерно для восьми игроков, которые в основном играют в одной области, на ванильных или слегка модифицированных настройках - да, с -Xmx около 3g. Двенадцати игрокам, разбредшимся по нескольким городам, или любым модам карт нужно 6 ГБ или больше.
Какое значение задать для -Xmx?
Семьдесят-восемьдесят процентов памяти тарифа. Это оставляет место для памяти JVM вне heap, которую контейнер тоже учитывает. На тарифе 4 ГБ - -Xmx3g; на 8 ГБ - -Xmx6g. Никогда не задавайте весь объём тарифа.
Почему сервер Zomboid на четвёртой неделе потребляет больше RAM?
Скорее всего, из-за пика популяции по умолчанию: при PopulationPeakMultiplier, равном 1.5, и PopulationPeakDay, равном 28, число зомби растёт в течение первого месяца. К этому добавляются разбредающиеся игроки, копящиеся предметы и транспорт. Рассчитывайте на пик, а не на первую неделю.
Много ли RAM потребляют моды карт?
Больше, чем большинство модов. Они добавляют в мир клетки, поэтому игроки разбредаются дальше, а сервер загружает больше областей одновременно, а плотные моды карт несут больше контейнеров и предметов на здание. Серверу с несколькими модами карт место в диапазоне от 8 ГБ.
Помогает ли перезапуск сервера?
Он возвращает JVM к чистому heap, и его стоит делать по расписанию, обычно раз в день. Предметы, транспорт и зомби он не убирает, потому что они сохранены в мире. Если в течение часа после перезапуска память снова прижата к лимиту, серверу нужен тариф побольше или мир полегче.




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