RE:NODE

Руководства10 мин чтения

SCUM: лаги сервера, марионетки и лут

Как подобрать и настроить сервер SCUM: RAM и CPU по числу игроков, настоящие причины лагов, лимиты марионеток и техники, рост базы данных и папка переопределений Loot.

0 прочтений

Производительность сервера SCUM сводится к тому, сколько ему приходится симулировать: игроков, марионеток, животных, турели, машины и каждый когда-либо построенный элемент базы - и всё это на сервере Unreal, где большую часть работы делает один главный поток. Рассчитывайте минимум на 8 ГБ памяти для небольшого сообщества и на 12-16 ГБ для загруженного сервера на 64 слота с большими базами, а также на высокую скорость одного ядра, а не на много ядер. Когда сервер лагает, причина почти всегда одна из четырёх: слишком много игроков для этого CPU, слишком много персонажей с AI, мир, забитый базами и машинами, или слишком долгое время с последнего перезапуска. Лут - отдельная система, которую настраивают через папку переопределений Loot и два множителя в ServerSettings.ini, и правильная настройка лута тоже помогает производительности, потому что слишком щедрый лут заполняет мир предметами, которые сервер вынужден отслеживать.

Упомянутые здесь настройки по одной разобраны в статье настройки сервера SCUM.

На что сервер SCUM тратит ресурсы#

Прежде чем что-то менять, полезно понимать, куда уходит работа:

  • Игроки. Каждый подключённый игрок - это полная симуляция персонажа: состояние тела, инвентарь, метаболизм, - плюс всё, что ему реплицируется. Число игроков - самая большая отдельная статья расходов.
  • Персонажи с AI. Марионетки (заражённые), животные, турели и другие вооружённые NPC работают на AI. Марионеток больше всего, и их количество - главный регулятор в ваших руках.
  • Сохраняемые объекты. Каждый элемент базы, сундук, предмет на земле и машина существуют в мире и в базе сохранения. На сервере, который ни разу не вайпали и где щедрые лимиты на базы, их очень много.
  • Сохранение. Мир записывается в SCUM.db, базу данных SQLite. Большая база замедляет сохранения и запуски.

Движок опирается на один главный поток. Дополнительные ядра помогают с сетью, сохранением и подгрузкой ассетов, но саму симуляцию не ускоряют. Поэтому сервер, у которого в целом «всего 40% CPU», всё равно может лагать: одно ядро на пределе, остальные простаивают. Как понять, какой ресурс на самом деле узкое место, прежде чем платить за больший объём любого из них, объясняет статья CPU или RAM для игровых серверов.

Требования по числу игроков#

Это рабочие цифры из опыта эксплуатации подобных выживалок на Unreal; ваш сервер SCUM может оказаться ниже или выше в зависимости от плотности баз и настроек AI. Измерьте свой, прежде чем покупать.

ИгрокиRAMCPUПримечания
До 16, приватная группа8 GB2 быстрых ядраНижняя граница - примерно столько нужно, чтобы сервер нормально запустился
16-32, небольшое сообщество10-12 GB2-3 ядраТипично для нового публичного сервера
32-64, загруженный публичный12-16 GB3-4 ядраКоличество баз и машин начинает доминировать
64+, поднятый лимит16 GB+4 быстрых ядраТолько при жёстких лимитах на AI и базы
  • Диск: установка сервера занимает заметно больше 10 ГБ и растёт с обновлениями. База сохранения и логи со временем добавляют ещё. Оставляйте большой запас; заполненный диск посреди сохранения - именно так портятся базы данных.
  • Сеть: на игрока немного, но чувствительно к задержке, UDP. Расстояние до игроков важнее пропускной способности - разницу объясняет статья задержка, джиттер и потеря пакетов.

Самая большая ошибка - выставить scum.MaxPlayers на 64, потому что поле это позволяет, на железе, рассчитанном на 30. В четыре утра сервер чувствует себя нормально, а в девять вечера падает. Выберите число, которое вы можете обслужить в пик, и поднимайте его, когда сервер стабильно заполнен и при этом здоров. Общий подход описан в статье сколько игроков помещается на сервер.

Как найти настоящую причину лагов#

«Сервер лагает» - это несколько разных проблем, и решение зависит от того, какая из них у вас.

СимптомВероятная причинаЧто проверить первым
В часы пик у всех откатывает позициюГлавный поток перегруженЧисло игроков и лимит марионеток
Лаги рядом с одной большой базойСлишком много элементов базы в одном местеЛимиты флагов и баз, гниение
Лаги усиливаются каждый день до перезапускаНакопление состояния, рост памятиРасписание перезапусков, график памяти
Лагает один игрок, остальные в порядкеЕго подключениеЕго пинг, а не сервер
Долгие фризы каждые несколько минутСохранения при большой базе данныхРазмер базы, запас на диске
Запуск занимает много минутОчень большое состояние мираПолитика вайпов, лимиты на базы

Прежде чем решать, посмотрите графики памяти и CPU вместе с числом игроков за целые сутки. Если линия CPU упирается в потолок каждый вечер в один и тот же час, проблема в игроках или AI. Если линия памяти стабильно растёт от перезапуска к перезапуску, это проблема накопленного состояния, которую перезапуск по расписанию прячет, а вайп или настройка гниения решают. Эти формы графиков разобраны в статье как читать график нагрузки сервера.

Рычаги в порядке эффективности#

1. Лимиты марионеток и AI

scum.MaxAllowedPuppets ограничивает число заражённых во всём мире. Его снижение - самое эффективное изменение на перегруженном сервере, и умеренное сокращение игроки почти не замечают: большинство марионеток находятся там, где никто не стоит. Плотность животных (scum.AnimalGlobalDensityMultiplier) и множители распространённости по видам добавляют ещё AI; урежьте их, прежде чем урезать слоты игроков.

Повышение здоровья или урона марионеток напрямую CPU не стоит, но удлиняет бои, а более долгие бои с большей стрельбой притягивают больше марионеток. Это настройка сложности с побочным эффектом для производительности.

2. Слоты игроков

Если главный поток на пределе при разумных настройках AI, на сервере больше игроков, чем может просимулировать железо. Либо уменьшите scum.MaxPlayers, либо дайте серверу больше CPU. Очередь в пик лучше, чем заполненный сервер, на котором никому не нравится играть.

3. Базы, флаги и гниение

Элементы базы - сохраняемые объекты, и на зрелом сервере их могут быть десятки тысяч. Держать это под контролем помогают три настройки:

  • Флаги на игрока. Оставьте scum.AllowMultipleFlagsPerPlayer выключенным или держите scum.NumberOfAllowedFlagsPerPlayer низким. Каждый флаг - это база.
  • Гниение. Множитель гниения элементов базы определяет, как быстро разваливаются базы без обслуживания. Некоторое гниение само убирает брошенные базы; нулевое означает, что каждая построенная база вечна, пока её не удалит админ.
  • Уборка силами админов. Удаляйте брошенные базы по опубликованному правилу о неактивности, используя команды уничтожения, описанные в статье админ-команды и сквады в SCUM.

4. Техника

Каждая машина - сохраняемый физический объект. Секция техники в ServerSettings.ini ограничивает, сколько машин каждого типа может существовать и как долго проживёт неиспользуемая машина. Щедрые лимиты вместе с долгими таймерами неактивности превращают каждую базу в автостоянку, а каждая машина стоит времени симуляции и сохранения.

5. Перезапуски

Серверы на Unreal накапливают состояние за долгую сессию. Большинство серверов SCUM перезапускаются дважды в день, что заодно даёт предсказуемый момент для применения изменений настроек и обновлений. Назначьте перезапуск на самые тихие часы, объявите его в игре и убедитесь, что остановка штатная и мир сначала сохраняется. О выборе времени - статья расписания перезапусков, которые помогают.

База сохранения и логи#

Всё сохраняемое лежит в SCUM/Saved/SaveFiles/SCUM.db, а рядом - SCUM.db-wal и SCUM.db-shm. Журнал упреждающей записи SQLite (-wal) хранит последние изменения, пока они не будут слиты в основной файл, поэтому три файла всегда нужно копировать вместе и только при остановленном сервере. Копия одного SCUM.db, снятая на работающем сервере, может не содержать последних часов игры или вовсе не открыться.

Размер базы следует за размером мира. База, которая неделя за неделей стабильно растёт, говорит о том, что базы, предметы и машины создаются быстрее, чем их убирают гниение и чистка. Это самая объективная мера того, устойчивы ли ваши настройки баз и гниения.

Игровые логи в SCUM/Saved/SaveFiles/Logs/ тоже постоянно растут. Игру они не замедляют, но заполняют диск, а заполненный диск во время сохранения - именно так портится база данных. Архивируйте и чистите их по расписанию.

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

Как устроен лут в SCUM#

Лут в SCUM производят спавнеры: точки в мире и обыскиваемые контейнеры вроде шкафов и шкафчиков, каждому из которых назначен пресет спавнера со списком того, что может появиться, и с какой вероятностью. Два глобальных множителя в ServerSettings.ini масштабируют всё сразу:

ServerSettings.ini
scum.SpawnerProbabilityMultiplier=1scum.ExamineSpawnerProbabilityMultiplier=1scum.EnableItemCooldownGroups=1scum.ItemCooldownGroupsDurationMultiplier=1.000000

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

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

Папка переопределений Loot#

Настройка лута находится в SCUM/Saved/Config/WindowsServer/Loot/:

code
Loot/  GeneralZoneModifiers.json  Nodes/Default/          Nodes/Override/  Items/Default/          Items/Override/  Spawners/Presets/Default/   Spawners/Presets/Override/  CooldownGroups/Default/     CooldownGroups/Override/

Папки Default - справочные: собственные значения игры, выгруженные, чтобы их можно было прочитать. Что-то меняют только файлы в папках `Override`. Правка файла в Default ничего не даёт, и это самая частая причина, по которой изменение лута будто бы не работает.

Значения по умолчанию выгружаются админ-командами в игровом чате:

КомандаЧто выгружает
#ExportDefaultLootTreeДерево лута: категории предметов и их структуру
#ExportDefaultItemSpawningParametersПравила спавна по предметам
#ExportDefaultItemSpawnerPresetsВсе пресеты спавнеров
#ExportItemSpawnerPresetsInZone <sector>Пресеты, используемые в одном секторе, например A2
#ExportDefaultItemSpawningCooldownGroupsГруппы перезарядки
#ReloadLootCustomizationsAndResetSpawnersПерезагружает ваши переопределения без перезапуска

Порядок работы:

  1. Выгрузите значения по умолчанию для того, что хотите изменить.
  2. Скопируйте в соответствующую папку Override только те файлы, которые меняете, сохранив структуру.
  3. Отредактируйте копии.
  4. Выполните #ReloadLootCustomizationsAndResetSpawners или перезапустите сервер.
  5. Проверьте в игре, в секторе, где изменение должно проявиться.

Пресет спавнера перечисляет предметы с редкостью и полями вроде Probability, QuantityMin и QuantityMax, AllowDuplicates, InitialDamage и RandomDamage, ShouldFilterItemsByZone, а также FixedItems для гарантированного дропа. Точная схема - в выгруженных файлах; правьте их, а не пример из руководства, написанного для старой сборки.

GeneralZoneModifiers.json применяет модификаторы по зонам - так можно сделать один регион богаче или беднее, не правя каждый пресет в нём; это полезно для зоны ивента или намеренно опасной зоны с богатым лутом.

Настройка лута, за которую игроки скажут спасибо#

  • Поднимайте базовые вещи, а не оружие. Немного больше еды, ёмкостей для воды, одежды и инструментов делают первый час менее нудным. Увеличение спавна оружия и патронов заканчивает прогресс за день.
  • Не выключайте группы перезарядки. Именно они не дают одному и тому же ценному предмету появляться в каждом втором шкафчике после удачной серии.
  • Двигайтесь мягко. Глобальные множители от 1.25 до 1.5 ощущаются щедрыми. Удвоение всего затапливает мир, а чем больше предметов валяется вокруг, тем больше серверу отслеживать и сохранять.
  • Меняйте что-то одно за раз и играйте сутки, прежде чем судить. Лут появляется со временем, а не в момент перезагрузки.
  • Держите переопределения небольшими. Папка Override, в которой лежат только изменённые файлы, переживает обновления игры гораздо лучше полной копии всех значений по умолчанию, которую пришлось бы перепроверять после каждого патча.

Устранение неполадок#

Изменения лута ничего не дают. Вы правили файл в Default, или переопределение лежит не по соответствующему пути в Override, или JSON не удалось разобрать. Проверьте структуру и валидность JSON.

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

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

Лаги вокруг одной базы. Слишком много элементов базы в одном месте. Со временем помогают лимиты на флаги и некоторое гниение; быстрее помогает разговор с админом.

Память растёт, пока сервер не падает. Перезапускайте по расписанию и проверьте количество баз и машин. Если хостинг останавливает сервер на лимите памяти, мир теряет всё с последнего сохранения, так что не работайте на грани.

База данных растёт каждую неделю. Базы и машины создаются быстрее, чем удаляются. Ужесточите гниение, лимиты флагов и техники и, если нужно, запланируйте вайп.

FAQ#

Сколько RAM нужно серверу SCUM?

Около 8 ГБ для небольшой группы, 10-12 ГБ для небольшого сообщества и 12-16 ГБ или больше для загруженного сервера на 64 слота. Количество баз и машин значит не меньше, чем число игроков.

Почему сервер SCUM лагает при низкой загрузке CPU?

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

Как проще всего улучшить производительность сервера SCUM?

Снизьте scum.MaxAllowedPuppets, держите лимиты на базы и технику разумными и перезапускайте сервер дважды в день. Этих трёх мер хватает большинству серверов.

Почему не работают мои переопределения лута?

Читаются только файлы в папках Override; папки Default - выгруженные справочники. Скопируйте файл по соответствующему пути в Override и перезагрузите.

Можно ли перезагрузить лут без перезапуска?

Да. #ReloadLootCustomizationsAndResetSpawners из игрового чата перезагружает файлы переопределений и сбрасывает спавнеры.

Вредит ли производительности больше лута?

Косвенно. Больше предметов в мире - больше объектов, которые нужно отслеживать и сохранять. Умеренная прибавка - нормально; затопить мир - нет.


Комментарии

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

0/2000