Многие владельцы серверов 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:
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:
[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:
# Force garbage collection and prune unreferenced world objects
valheim-cli rcon "removedrops"
Команда removedrops удаляет весь брошенный лут на земле, не задевая сундуки и инвентари игроков, что мгновенно освобождает тысячи объектов zDO.
При использовании панели управления серверами автоматическая очистка потерянных сущностей и оптимизация сетевых очередей выполняются по настраиваемому расписанию без ручного ввода команд.
Тонкая настройка процессора и параметров ядра Linux#
Серверный процесс Valheim интенсивно использует одно процессорное ядро для сериализации сетевых пакетов. Убедитесь, что регулятор частоты процессора на сервере Linux установлен в режим максимальной производительности:
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Оптимизируйте размеры буферов сетевого стека UDP в /etc/sysctl.d/99-valheim-performance.conf:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
Примените параметры ядра:
sudo sysctl --system
Диагностика сетевых лагов при совместном строительстве#
Перезапустите службу сервера Valheim для применения сетевых буферов:
sudo systemctl restart valheim
sudo journalctl -u valheim -n 30 --no-pager | grep -i "network"
Проверьте нагрузку на сетевой интерфейс во время игры:
sudo ss -ulnp | grep 2456
Благодаря увеличению dataRate до 1 МБ/с и расширенным сокетам ядра Linux, даже масштабные поселения викингов с десятками тысяч построек перестанут вызывать рассинхронизацию и зависание сундуков.




