Чаще всего сервер Valheim лагает вовсе не потому, что ему не хватает CPU. Причина обычно в одном из трёх: игрок с плохим соединением владеет зоной, в которой стоят все остальные; в многолюдной сцене образуется больше обновлений, чем игра готова отправить каждому игроку; или в базе столько объектов, что каждому клиенту тяжело её загрузить и просчитать. Короткий фриз раз в полчаса - четвёртая, отдельная история: это сохранение мира. У каждой причины своё лечение, и переход на тариф помощнее исправляет только одну из них. В этой статье - как Valheim делит симуляцию, как понять, какой у вас лаг, и что менять и в каком порядке.
Если вы ещё только настраиваете сервер, начните с руководства по выделенному серверу Valheim; здесь предполагается, что сервер работает, а жалоба в том, что работает он плохо.
Как Valheim делит работу между сервером и игроками#
Valheim не симулирует мир на сервере так, как это делают Minecraft или Factorio. Мир разбит на квадратные зоны 64 на 64 метра. Каждая постоянная вещь в мире - кусок стены, сундук, дерево, брошенная стопка древесины, приручённый кабан - хранится как ZDO, zone data object, и у каждого ZDO есть владелец. Владелец - это машина, которая его симулирует и рассылает его состояние всем остальным.
Когда игрок заходит в область, где больше никого нет, он становится владельцем объектов в ней. Его игра просчитывает AI существ, физику падающих деревьев и огонь в очаге, а сервер передаёт результаты всем, кто придёт следом. Сам сервер владеет объектами только там, где рядом нет ни одного игрока, и хранит мир на диске.
У такой архитектуры есть последствия, которые вы ощущаете на себе:
- Ваша игра зависит от чужого соединения. Если владелец области сидит на мобильном интернете, монстры, с которыми вы деретесь, просчитываются через его раздачу с телефона. Вы видите, как они телепортируются.
- Ваша игра зависит от чужих компьютеров. Игрок, чья машина не справляется, медленно симулирует свои зоны, и это видят все рядом с ним.
- Владение «липкое». Оно переходит, когда владелец уходит из области или отключается, а не когда появляется кто-то с соединением получше.
- CPU сервера важен меньше, чем кажется. Сервер занимается сетью, сохранением и зонами без игроков. Для компании из десяти человек он редко бывает узким местом.
Выделенный сервер всё равно сильно помогает - мир больше не зависит от того, включён ли чей-то компьютер, и никто не платит производительностью за хостинг во время игры, - но он не меняет того, кто симулирует зону, в которой вы стоите.
Как отличить виды лагов в Valheim#
Прежде чем что-то менять, разберитесь, какой у вас случай. Когда знаешь, на что смотреть, симптомы легко различить.
| Симптом | Вероятная причина | Где смотреть |
|---|---|---|
| Все замирают на секунду, по регулярному таймеру | Сохранение мира | Лог сервера, строки World saved |
| Монстры и лодки телепортируются только возле одного игрока | Этот игрок владеет зоной и у него плохая связь | Его пинг в оверлее F2 |
| У всех рассинхрон в большом бою или на главной базе | Слишком много обновляемых объектов для лимита отправки | Много игроков и много объектов в одном месте |
| Низкий FPS на базе, в других местах нормально | Число объектов на стороне клиента | FPS у каждого игрока |
| Долгая загрузка при входе, короткие подвисания при телепорте | Большой, плотно застроенный мир | Размер файла .db |
Клавиша F2 в игре открывает сетевой оверлей с пингом и объёмом отправленных и полученных данных. Это самый быстрый способ понять, виновато ли соединение игрока, и работает он на стороне клиента, так что каждый может проверить себя без прав администратора.
Главное - отличить вторую строку от третьей. Если лаг следует за конкретным человеком, дело во владении зоной и его соединении. Если лаг привязан к месту или моменту - главная база, арена босса, набег, - дело в числе объектов и пропускной способности сети. Эти исправления не пересекаются.
Число объектов: почему большие базы тормозят#
Каждый элемент постройки - объект. Как и каждый факел, каждое растение на грядке, каждый предмет на земле, каждое животное, каждая плавильня и каждая табличка. Скромная хижина - это несколько сотен элементов. Давняя общая база с большим залом, фермой, стойлом, рядом плавилен и гаванью легко набирает многие тысячи, а мир с несколькими такими базами держит огромное количество объектов в считаных зонах.
Это стоит ресурсов в трёх местах:
- Загрузка. Когда игрок приходит, его клиент должен получить и создать каждый объект в окружающих зонах. Отсюда подвисание при телепорте домой и долгий экран загрузки при входе.
- Симуляция. Владелец зон базы просчитывает всё активное в них: огонь, станции готовки, ульи, растущие растения, животных и их AI. Стоимость растёт с тем, что работает, а не с тем, что просто стоит.
- Прочность конструкций. Valheim рассчитывает опору для каждого элемента постройки. Большие сооружения на высоких стопках опор дорого «устаканиваются» при загрузке, отчасти поэтому большой зал подтормаживает, когда к нему подходишь.
Некоторые вещи обходятся намного дороже, чем можно подумать по их размеру:
- Приручённые животные. Загон с сорока волками или тридцатью локсами - это сорок или тридцать существ, чей AI крутится у игрока, владеющего зоной. Фермы животных - самая частая причина лагов на зрелой базе.
- Предметы на земле. Каждая брошенная стопка - физический объект. Куча из сотни стопок камня у плавилен - это сотня объектов для синхронизации. Сложите их в сундуки.
- Огонь и освещение. Факелы, жаровни и очаги в основном съедают FPS на каждом клиенте, потому что каждый из них - источник света, эффект частиц и счётчик топлива. Десятки таких в одном кадре заметны на слабых машинах.
- Терраформинг. Поднятая, опущенная и выровненная земля хранится как изменения рельефа. База на вершине холма, выровненной вручную, несёт много данных о рельефе, которые должен загрузить каждый гость.
В консоли ванильного сервера число объектов не увидеть, но размер файла мира - неплохой ориентир. У нового мира .db весит несколько мегабайт. Мир больше 100 МБ содержит очень много всего, и если лаги сосредоточены там, где идёт стройка, причина в этом.
Сетевая сторона: почему в людных сценах рассинхрон#
Valheim ограничивает объём данных, который отправляет каждому участнику за одно обновление. Когда в сцене больше меняющихся объектов, чем помещается в этот бюджет, обновления встают в очередь и приходят с опозданием, а опоздавшие обновления выглядят как откаты, враги, бьющие вас с нескольких метров, и двери, которые открываются дважды. Поэтому десять игроков, отбивающих набег на главной базе, ловят рассинхрон, а те же десять, разбросанные по карте, - нет.
Хуже становится от трёх вещей:
- Больше игроков в одном месте. Каждый игрок в области добавляет свои изменения для синхронизации и ещё один поток, которому нужно отправлять данные.
- Больше движущихся объектов. Существа, снаряды, падающие деревья и предметы с физикой - самые дорогие.
- Плохие маршруты. Джиттер и потеря пакетов превращают бюджет, которого хватило бы, в недостаточный. Задержка, джиттер и потеря пакетов объясняет, как их различить, а чтение traceroute и mtr - как доказать, где начинается плохой маршрут.
В ванильной игре нет настройки лимита отправки. Ответ сообщества - сетевой мод, самый известный из них Better Networking, который поднимает лимиты и сжимает трафик. Он работает через BepInEx, так что это вариант только для ПК, а насколько его нужно ставить ещё и на клиенты, зависит от того, какие его функции вы используете; прежде чем раскатывать, прочитайте актуальные требования на странице мода. Относитесь к нему как к любому моду: проверьте на копии мира и ждите, что после патча игры ему понадобится обновление. Как ставить моды BepInEx на сервер, описано в статье Моды Valheim с BepInEx.
Кроссплей добавляет ещё одно соображение. У игроков, заходящих через relay кроссплея, на одно звено больше между ними и сервером, чем у Steam-игрока, подключающегося по IP. Для большинства компаний это несколько миллисекунд, о которых не стоит волноваться, но группа только из Steam-игроков, у которой кроссплей включён по умолчанию, немного теряет просто так. Когда он стоит того, разобрано в статье Кроссплей в Valheim и игроки с Xbox.
Что нужно самому серверу#
Процесс сервера лёгкий, но не бесплатный. Он держит мир в памяти, пересылает каждое обновление между игроками, симулирует зоны без игроков и пишет мир на диск.
| Ситуация | RAM | CPU | От чего зависит |
|---|---|---|---|
| 2-4 игрока, новый мир | 2 GB | 1 ядро | Почти ни от чего |
| 5-8 игроков, несколько баз | 3-4 GB | 1.5-2 ядра | Трафик пересылки, размер сохранения |
| 10 игроков, зрелый плотно застроенный мир | 4-6 GB | 2+ ядра | Число объектов, время сохранения |
| BepInEx с множеством модов | 6-8 GB | 2+ ядра | Зависит от модов |
Два серверных показателя важнее остальных.
Тактовая частота. Основной цикл опирается на один поток. Второе ядро помогает, потому что сохранение и сеть могут работать параллельно, но сверх двух ядер вы платите за мощность, которую игра не использует. CPU или RAM для игровых серверов объясняет, почему одно загруженное под завязку ядро на графике может выглядеть как CPU, занятый на четверть.
Память со временем. Потребление памяти растёт по мере того, как исследуется и загружается всё больше мира, и на долго работающем сервере возвращается не всё. Еженедельный перезапуск держит его ровным. На RE:NODE сервер, упёршийся в лимит памяти, останавливается и перезапускается начисто, а не уходит в swap. Это защищает машину, но завершает процесс без сохранения - поэтому следите за графиком памяти относительно лимита и переходите на следующий тариф до того, как это станет закономерностью, а не после.
Фриз при сохранении и как его сократить#
Valheim записывает весь мир по таймеру, который задаётся -saveinterval, по умолчанию 1800 секунд. На маленьком мире сохранение мгновенное. На большом это заметный фриз для всех игроков, и случается он по расписанию - поэтому игроки и описывают его как «лаг каждые полчаса».
Лог сервера показывает, сколько длится каждое сохранение:
World saved ( 1842.35ms )Точная формулировка немного менялась от версии к версии, но время там есть. Если число измеряется секундами и фризы совпадают с ним по времени, вы нашли свой лаг.
Что помогает:
- Быстрый накопитель. Дорогая часть - это запись. NVMe превращает многосекундный фриз в короткий - статья что на самом деле меняет NVMe честно говорит, где это важно, и большое сохранение Valheim - как раз такой случай.
- Мир поменьше. Уборка брошенных предметов, прореживание загонов и снос заброшенных аванпостов уменьшают файл и время его записи.
- Разумный интервал. Хочется поднять
-saveinterval, чтобы сохраняться реже. Не увлекайтесь: интервал - это ещё и ровно тот прогресс, который теряется при некорректной остановке. Десять-двадцать минут - разумный компромисс для большого мира.
# Save every 15 minutes, keep 4 rotating backups-saveinterval 900 -backups 4Фриз, который случается в случайные моменты, а не по таймеру сохранения, - это что-то другое, обычно загрузка новой области или мод. Прежде чем делать выводы, проверьте метки времени в логе.
Исправления в том порядке, в каком их стоит пробовать#
Идите по списку сверху вниз и остановитесь, когда лаги пропадут. Большинство компаний не доходит дальше пятого пункта.
- Определите вид лага. Используйте таблицу выше. Не начинайте перестраивать базу из-за чьего-то Wi-Fi.
- Переместите владение зоной. Если лаг ходит за одним игроком, пусть он уйдёт из области или перезайдёт, а первым приходит игрок с лучшим соединением. Владение переходит к тем, кто остался. На запланированный бой с боссом или набег первым заходит игрок с лучшей связью.
- Уберите всё с земли. Подберите брошенные предметы вокруг базы и плавилен. Это бесплатно и часто даёт поразительный эффект.
- Сократите фермы. Ограничьте число приручённых животных тем, что действительно нужно. Тридцать кабанов дают не больше полезного мяса, чем восемь.
- Сокращайте сохранение, а не удлиняйте интервал. Проверьте время в строках
World saved; если оно большое, уменьшайте мир, а не поднимайте интервал. - Разнесите постройки. Следующий проект начните в нескольких зонах от главной базы, а не пристраивайте к ней.
- Выключите кроссплей, если он никому не нужен. Тогда Steam-игроки подключаются напрямую.
- Попробуйте сетевой мод - для компании только с ПК и загруженной базой, после проверки на копии.
- Перезапускайте раз в неделю по расписанию, чтобы память не ползла вверх месяц подряд. Про выбор времени - статья расписания перезапусков, которые помогают.
- Повышайте тариф только если собственный график CPU сервера упирается в лимит в момент лагов. Как это выглядит, показано в статье как читать график нагрузки сервера.
Последний пункт стоит последним не случайно. Больше памяти никак не поможет зоне, которой владеет человек на гостиничном Wi-Fi, а больше ядер никак не помогут клиенту, рисующему триста факелов.
Моды, которые помогают, и моды, которые стоят ресурсов#
Моды бывают по обе стороны этой проблемы.
Полезные в подходящей ситуации: сетевые моды, поднимающие лимиты отправки; серверные моды очистки, удаляющие брошенные предметы через какое-то время; моды, позволяющие серверу самому владеть большим числом зон. Они меняют поведение игры на уровне, которого ванильная игра не предполагала, - именно поэтому они помогают и именно поэтому ломаются в день патча.
Затратные: всё, что добавляет много объектов. Строительные наборы с сотнями новых элементов подталкивают к более крупным постройкам; моды на фермерство и посадки умножают число растений; наборы существ добавляют AI. Оверхолы с новыми биомами и боссами повышают расход памяти и время загрузки. Это не причина от них отказываться, но причина заложить под них ресурсы.
Кроме того, модифицированный сервер не может принимать игроков с Xbox, потому что на консоли нельзя ставить моды. Если в компании есть кто-то с Xbox, доступны только моды, работающие исключительно на сервере. Прежде чем разбираться с лагами на сервере с модами, прочитайте лог BepInEx на предмет ошибок: мод, выбрасывающий исключение каждый кадр, - это лаг, который не исправит никакая настройка.
Устранение неполадок#
Сервер подтормаживает ровно каждые 30 минут. Это сохранение мира. Посмотрите длительность в строке World saved и работайте над сохранением, а не над сетью.
Один игрок всегда лагает и тянет за собой остальных. Этот игрок владеет зонами при плохом соединении или слабом ПК. Проверьте его пинг в F2. Кабель вместо Wi-Fi исправляет больше лагов в Valheim, чем любая настройка.
На базе рассинхрон у всех, в поле - ни у кого. Число объектов и бюджет отправки. Сначала уберите предметы с земли и загоны с животными.
Низкий FPS на базе у всех. Клиентская стоимость света, элементов построек и рельефа. Более быстрый сервер не поможет; поможет меньше факелов и меньше элементов в одном кадре.
Лаги начались сразу после обновления. Мод устарел, или мир конвертируется. Прочитайте лог с начала загрузки. В статье что делать, когда обновление мода всё сломало есть порядок отката.
Сервер сам перезапустился посреди сессии. Обычно это лимит памяти. Посмотрите на график памяти перед перезапуском и на то, как часто перезапуски повторяются - статья почему ваш игровой сервер постоянно перезапускается помогает различить причины.
FAQ#
Исправит ли лаги Valheim более дорогой сервер?
Только если собственный CPU или память сервера упираются в лимит в момент лагов. Большая часть лагов в Valheim связана с владением зонами, числом объектов или бюджетом отправки на игрока, и ничто из этого не меняется вместе с тарифом. Сначала посмотрите графики, потом решайте.
Почему лаги прекращаются, когда выходит определённый игрок?
Он владел зонами, в которых находились все. Когда он уходит, владение переходит к другому игроку, и если у того соединение и ПК лучше, всё выравнивается. Пусть в людные места первым заходит игрок с лучшей связью.
Стоит ли поднять интервал сохранения, чтобы избавиться от фризов?
Немного - да, сильно - нет. Интервал - это ещё и объём прогресса, который теряется при падении или остановке из-за нехватки памяти. Сделать мир дешевле для сохранения и сохранять его на быстрый накопитель лучше, чем сохраняться редко.
Сколько игроков выдерживает Valheim, прежде чем лаги станут неизбежны?
Игра ограничивает ванильный сервер десятью игроками, и десять нормально играют в разумно застроенном мире. Неизбежными лаги делают десять игроков в одной плотной базе во время набега, а не десять игроков в мире. Моды, поднимающие лимит, выходят за рамки того, на что рассчитана сетевая часть.
Лагает ли сервер от факелов и костров?
В основном они съедают FPS на машине каждого игрока как источники света и эффекты. Топливо и горение просчитывает владелец зоны, и на один костёр это дёшево. Десятки огней в одном кадре - проблема клиента, а не сервера.




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