RE:NODE

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

Лаги сервера Satisfactory на больших фабриках

Почему выделенный сервер Satisfactory тормозит по мере роста фабрики: конвейеры, транспорт, размер сохранения, репликация и память - и решения при стройке, которые сохраняют скорость.

0 прочтений

Выделенный сервер Satisfactory замедляется по трём причинам, и ни одна из них не связана с числом игроков. Симуляция фабрики растёт с каждой машиной и каждым предметом на конвейере; вместе с ней растёт сохранение, поэтому каждое автосохранение замораживает игру всё дольше; а сервер должен отправлять каждому игроку состояние всего, что рядом с ним, и в плотной фабрике этого состояния очень много. Память следует за сохранением - 8 GB хватает с запасом для нового мира, зрелой мегабазе нужно 12-16 GB. Исправления - это в основном решения при стройке: меньше машин с разгоном, поезда и дроны вместо грузовиков, хранение в контейнерах, а не на конвейерах, и интервал автосохранения, выбранный осознанно. В этой статье - откуда берётся нагрузка, как понять, какой у вас лаг, и что менять.

Установка и привязка сервера описаны в руководстве по выделенному серверу Satisfactory, а настройки Server Manager - в статье настройки и сохранения сервера Satisfactory. Эта статья начинается там, где фабрика стала достаточно большой, чтобы это ощущалось.

На что тратит время сервер Satisfactory#

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

Работа делится на четыре части:

  • Симуляция фабрики. Обновляется каждая машина, конвейер, разделитель, труба, поезд и транспорт. Это в основном выполняется в одном игровом потоке, так что потолок определяет тактовая частота.
  • Репликация. Для каждого подключённого игрока сервер вычисляет, какие объекты рядом изменились, и отправляет их. Игрок, стоящий посреди блока из 300 машин, обходится гораздо дороже, чем игрок посреди поля.
  • Сохранение. При каждом автосохранении весь мир сериализуется в один файл .sav. Время на это растёт вместе с фабрикой.
  • Управление памятью. Движок периодически чистит память. В большом мире эта очистка - короткое подвисание, которое вы чувствуете.
состояние объектов рядомкаждый интервалТик фабрикимашины, конвейеры, поездаРепликациядля каждого игрока рядомАвтосохранениевесь мир в .savИгрокипримерно четвероФайлы сохраненийротация автосохранений
На что уходит время сервера в большой фабрике

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

Как отличить виды лагов#

СимптомВероятная причинаЧто проверить первым
Все замирают на секунду или больше, по регулярному таймеруАвтосохранениеСовпадает ли с интервалом автосохранения?
Производство падает, всё ощущается вялымТик фабрики не укладывается в бюджетГрафик CPU сервера: одно ядро в потолке
Откаты только на главной фабрикеНагрузка репликации рядом с плотными постройкамиПрекращается ли, если отойти?
Откатывает одного игрока, у остальных нормальноСоединение этого игрокаЕго пинг и потеря пакетов
Низкий FPS в больших фабриках, сервер в порядкеОтрисовка на клиентеFPS у каждого игрока
Подвисания с каждым днём всё хужеРост памяти, паузы на очисткуГрафик памяти относительно лимита

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

Первая строка - самая частая жалоба на зрелом сервере, и именно её чаще всего ошибочно диагностируют как «серверу нужно больше RAM».

Фриз при автосохранении#

В Satisfactory нет инкрементального сохранения. Каждое автосохранение записывает весь мир - каждое здание, каждый предмет на каждом конвейере, каждый транспорт и его маршрут - в один файл, и пока это происходит, игровой поток занят.

Размер сохранения растёт вместе с фабрикой:

ЭтапТипичный размер сохраненияКак ощущается автосохранение
Начало игры, Tier 1-21-5 MBНезаметно
Середина игры, поезда и нефть10-40 MBКороткая запинка
Поздняя игра, несколько больших площадок50-150 MBЗаметный фриз
Мегабаза, сотни часов150-250 MB+Фриз, на который жалуются

Фриз сокращают три вещи:

  1. Быстрый накопитель. Запись большая и последовательная. NVMe превращает многосекундный фриз в короткий; статья что на самом деле меняет NVMe честно говорит, в каких случаях это важно, и это один из них.
  2. Сохранение поменьше. Предметы на конвейерах сохраняются поштучно. Фабрика с длинными конвейерами, забитыми до отказа и упёршимися в тупик, хранит каждый из этих предметов. Если освободить конвейеры, используемые как склад, файл уменьшится.
  3. Осознанный интервал. Интервал автосохранения в Server Manager по умолчанию - пять минут. Десять вдвое уменьшают частоту, с которой это кто-то замечает, и вдвое увеличивают цену падения. Выберите число, с которым можно жить в обоих смыслах.

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

Решения при стройке, которые делают фабрику дешёвой#

Самый большой прирост производительности в Satisfactory даёт то, как вы строите, а не настройки сервера. Несколько принципов применимы почти к любой большой фабрике.

Меньше машин, которые делают больше. Power Shards разгоняют машину до 250%, а Somersloop - в 1.0 это усиление производства - умножают выход без дополнительных зданий. Десять разогнанных конструкторов делают работу двадцати пяти на обычной скорости, и каждый, которого вы не построили, - это здание, которое сервер не тикает, не реплицирует и не сохраняет. Платить приходится энергией; энергия дешевле производительности.

Контейнеры вместо конвейеров в роли склада. Предметы на конвейере - это отдельно отслеживаемые объекты. Предметы в контейнере - это просто число. Петля из конвейера или длинный забитый конвейер в роли буфера - одна из самых дорогих конструкций, какие можно построить. Подавайте в Industrial Storage Container и забирайте из него.

Поезда и дроны, а не грузовики. Автоматические грузовики и тракторы - худшие нарушители на серверах. Транспорт, следующий записанному маршруту, управляется физикой, обходится тем дороже, чем его больше, а на выделенных серверах у него давняя история застреваний, съездов с маршрута и остановок, когда рядом никого нет. Поезда ходят по фиксированным путям и стоят дёшево. Дроны ещё дешевле для логистики на большие расстояния с небольшими объёмами.

Загрузка в Dimensional Depot. В 1.0 Dimensional Depot позволяет отправлять предметы в центральное хранилище и строить прямо из него. Если использовать его для строительных материалов, исчезают целые сети конвейеров, которые существовали только для того, чтобы возить бетон и стальные балки на стройплощадку.

Фундаменты - не проблема. Начиная с Update 8 фундаменты, стены и другие простые строительные элементы обрабатываются как облегчённые постройки, которые намного дешевле, чем раньше. Большие полы и стены стоят памяти и размера сохранения, но почти не стоят симуляции. Дорого стоят машины и движущиеся предметы.

Лампы и таблички стоят FPS, а не времени сервера. Сотни ламп в одной области рисует каждый клиент. Если FPS в фабрике плохой на ПК у всех, а графики сервера спокойны, первым делом посмотрите на освещение.

Репликация и число игроков#

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

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

Помогают две вещи:

  • Настройка Network Quality в Server Manager. Она обменивает трафик и работу сервера на каждого клиента на плавность. Повышение помогает, когда транспорт и другие игроки дёргаются, а фабрика в порядке. На сервере, который и так упирается в CPU, понижение уменьшает работу на одного игрока.
  • Лимиты трафика движка. Сообщество давно советует поднимать лимиты сетевой пропускной способности Unreal Engine в серверных Engine.ini и Game.ini для больших фабрик, чтобы репликация не душилась. Ключи стандартные для Unreal, например MaxClientRate и MaxInternetClientRate в [/Script/OnlineSubsystemUtils.IpNetDriver] и TotalNetBandwidth в [/Script/Engine.GameNetworkManager]. Coffee Stain не документирует их как поддерживаемые настройки, правильные значения зависят от вашего соединения, а их эффект менялся между версиями игры - прежде чем править, проверьте актуальные советы на странице вики Satisfactory о выделенном сервере и сохраните копию исходных файлов.
FactoryGame/Saved/Config/LinuxServer/Engine.ini (example only)
[/Script/OnlineSubsystemUtils.IpNetDriver]MaxClientRate=104857600MaxInternetClientRate=104857600

У игроков тоже есть своя опция Network Quality в настройках клиента; если один игрок дёргается сильнее остальных, проверьте его настройку.

Память: сколько и почему растёт#

Память следует за сохранением. Чем больше фабрика, тем больше объектов в памяти, а потребление памяти Unreal за сессию только растёт.

ЭтапRAMПримечания
Новый мир, до 4 игроков8 GBС запасом на ранних тирах
Середина игры, поезда, несколько площадок10-12 GBЗдесь большинство компаний проводит основное время
Поздняя игра, зрелая фабрика12-14 GBЗакладывайте пик во время сохранения
Мегабаза или тяжёлые моды14-16 GBБольше всего добавляют строительные моды

Две вещи стоит понимать.

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

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

Тарифы Satisfactory в RE:NODE - от 8 GB до 14 GB. Контейнер, достигший лимита, останавливается и перезапускается начисто, а не уходит в swap. Это защищает машину, но стоит всего, что было после последнего сохранения; если график памяти подбирается к лимиту, переходите на тариф выше, пока это не вошло в привычку. Смена тарифа меняет лимиты на существующем сервере, а не пересоздаёт его, так что сохранение остаётся на месте. Признаки, на которые стоит реагировать, - в статье когда переходить на тариф выше.

CPU и что даёт более быстрое ядро#

Тик фабрики выполняется в основном в одном потоке. На графике это выглядит как одно ядро в потолке при остальных простаивающих, а при многоядерном выделении в среднем получается цифра, которая выглядит нормально. Статья как читать график нагрузки сервера объясняет, почему однопоточная игра может быть перегружена при 40% CPU по графику.

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

Когда тик фабрики не укладывается в бюджет, симптомы тонкие: машины производят чуть меньше номинала, поезда приходят с опозданием, а весь мир ощущается слегка «вязким». Ответ, по порядку: снесите ненужное, укрупните машины разгоном и Somersloop, замените грузовики, освободите конвейеры-буферы - и только потом думайте о тарифе побольше.

Перезапуски и обслуживание#

Перезапуск по расписанию - самая простая мера производительности для большого мира Satisfactory. Он очищает накопленную память, сбрасывает стоимость очистки движка и даёт чистую точку сохранения.

В Server Manager есть настройка Server Restart Time Slot, которая позволяет серверу перезапускаться самому в выбранный час. У хостинга с панелью можно использовать и расписание - на RE:NODE вкладка Schedules выполняет перезапуск и backup по cron-выражению, так что ночная копия делается сразу после чистого сохранения. Убедитесь, что включена Autosave on Player Disconnect, чтобы последний выходящий игрок всегда записывал мир.

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

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

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

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

Фризы усилились после постройки новой площадки. Больше предметов в пути и больше машин в сохранении. Проверьте, нет ли в новой постройке конвейеров, используемых как буфер.

Грузовики останавливаются или съезжают с маршрутов. Известная слабость автоматического транспорта на выделенных серверах. Замените маршрут поездом или дронами.

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

Одно ядро CPU в потолке, когда никого нет онлайн. Auto Pause выключена, поэтому фабрика работает круглосуточно. Это выбор; включите Auto Pause, если вы этого не хотели.

Откаты только на главной базе. Репликация. Помогают Network Quality и меньше игроков в самом плотном месте; тариф побольше обычно не помогает.

FAQ#

Делает ли больше RAM сервер Satisfactory быстрее?

Только если ему не хватало памяти. RAM позволяет серверу держать большую фабрику, не останавливаясь на лимите; он не ускоряет тик фабрики и не сокращает сохранение. Это делают более быстрые ядра и более экономная фабрика.

Насколько большой может быть фабрика Satisfactory на выделенном сервере?

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

Плохо ли поезда влияют на производительность?

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

Почему игра лагает, когда все в одной фабрике?

Сервер отправляет каждому игроку меняющиеся объекты вокруг него. Несколько игроков в самом плотном блоке умножают эту работу. Помогает разойтись или поднять Network Quality, если у сервера есть свободный CPU.

Стоит ли выключать Auto Pause для большой фабрики?

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


Комментарии

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

0/2000