Valheim Руководство

Оптимизация сервера Valheim: сетевые лимиты send data rate, zDO и моды производительности

Оптимизация производительности сервера Valheim: повышение сетевого лимита send data rate, очистка неиспользуемых zDO, настройка сокетов ядра Linux и устранение лагов при строительстве.

Оптимизация сервера Valheim: сетевые лимиты send data rate, zDO и моды производительности

Многие владельцы серверов Valheim сталкиваются с парадоксальной ситуацией: мощный выделенный сервер с быстрым процессором и гигабитным каналом начинает жестоко лагать, когда несколько игроков собираются на общей базе. Открытие сундуков происходит с задержкой в несколько секунд, мобы телепортируются, а анимация строительства зависает. Причина кроется в гибридной сетевой архитектуре движка Unity в Valheim, устаревших лимитах скорости передачи данных и накоплении сотен тысяч объектов zDO.

В этой статье подробно рассмотрены механизмы сетевой синхронизации Valheim, увеличение пропускной способности send data rate, оптимизация инстансов zDO и настройка параметров ядра Linux для максимального FPS.

Архитектура сетевой синхронизации Valheim и расчёт zDO#

Сетевой код Valheim построен на концепции децентрализованного хостинга зон. Сервер не симулирует всю физику мира централизованно. Вместо этого первый игрок, вошедший в область (сектор 64×64 метра), назначается «мастером зоны» (Area Host) и выполняет физические расчёты локально, пересылая дельты остальным игрокам через сервер.

Каждый интерактивный элемент мира представлен структурой zDO (Zone Data Object):

  • Любая стена, крыша, балка или костёр;
  • Изменённая точка рельефа (вырытая яма или насыпанный холм);
  • Брошенный предмет на земле, дерево или камень;
  • Прирученное животное или дикий монстр.

Когда база разрастается до 15 000–25 000 инстансов, объём данных zDO при входе игрока в сектор превышает доступный лимит сетевого буфера.

Увеличение лимита скорости передачи данных send data rate#

Исторически в коде сборки assembly_valheim.dll был зашит жёсткий лимит исходящей скорости передачи данных: всего 64 КБ/с на клиента (dataRate = 64 * 1024). При открытии сундуков или загрузке мегабазы этот канал мгновенно забивался, приводя к огромной очереди сетевых пакетов и рассинхронизации.

На современных версиях сервера лимит можно поднять с помощью модов оптимизации (например, Server_devcommands или Valheim Server Performance) или через переменные окружения BepInEx.

Установите BepInEx Pack для выделенного сервера Valheim:

bash
cd /opt/valheim
wget https://github.com/Valheim-Modding/Valheim-Server-Linux-Docker/releases/latest/download/bepinex.tar.gz
tar -xzf bepinex.tar.gz -C /opt/valheim/

Отредактируйте конфигурацию сетевого мода /opt/valheim/BepInEx/config/org.bepinex.plugins.valheim_data_rate.cfg:

ini
[Network]
## Sets the socket data rate in bytes per second (default was 64KB/s)
DataRate = 1048576

## Sets the maximum client queue size
ClientSendQueueSize = 2048

Значение 1048576 (1 МБ/с) полностью снимает искусственное бутылочное горлышко, позволяя клиентам моментально синхронизировать структуры базы.

Оптимизация количества инстансов и очистка брошенного лута#

Для оценки масштаба нагрузки в игре нажмите клавишу F2, чтобы открыть панель отладки, и обратите внимание на параметр Instances:

  • До 8 000 инстансов: Идеальная производительность, стабильные 60+ FPS.
  • 8 000–15 000 инстансов: Умеренная нагрузка, возможны микрофризы при входе.
  • Свыше 20 000 инстансов: Тяжёлая база, резкое падение производительности клиентов.

Главный источник скрытых инстансов — брошенные камни, смола и древесина, которые выпадают при добыче ресурсов и не исчезают, если рядом стоит верстак.

Настройте периодическую очистку брошенного мусора в консоли сервера через RCON или скрипт cron:

bash
# Force garbage collection and prune unreferenced world objects
valheim-cli rcon "removedrops"

Команда removedrops удаляет весь брошенный лут на земле, не задевая сундуки и инвентари игроков, что мгновенно освобождает тысячи объектов zDO.

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

Тонкая настройка процессора и параметров ядра Linux#

Серверный процесс Valheim интенсивно использует одно процессорное ядро для сериализации сетевых пакетов. Убедитесь, что регулятор частоты процессора на сервере Linux установлен в режим максимальной производительности:

bash
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Оптимизируйте размеры буферов сетевого стека UDP в /etc/sysctl.d/99-valheim-performance.conf:

ini
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576

Примените параметры ядра:

bash
sudo sysctl --system

Диагностика сетевых лагов при совместном строительстве#

Перезапустите службу сервера Valheim для применения сетевых буферов:

bash
sudo systemctl restart valheim
sudo journalctl -u valheim -n 30 --no-pager | grep -i "network"

Проверьте нагрузку на сетевой интерфейс во время игры:

bash
sudo ss -ulnp | grep 2456

Благодаря увеличению dataRate до 1 МБ/с и расширенным сокетам ядра Linux, даже масштабные поселения викингов с десятками тысяч построек перестанут вызывать рассинхронизацию и зависание сундуков.

Источники#