Valheim: краш сервера при загрузке мира
Заходишь на сервер, консоль весело крутит «Loading world», а потом — тишина, процесс сдох, в логе бессмысленный стектрейс на английском. Или того хуже: сервер стартует, но при первом же коннекте игрока роняет обратно в консоль. Это одна из самых неприятных категорий проблем в Valheim, потому что причина может лежать в четырёх совершенно разных местах — от банально битого файла до тупо нехватки памяти. Разберём по порядку, как сузить круг подозреваемых и что делать с каждым сценарием.
Содержание
Как отличить краш на загрузке от других падений
Первое, что нужно понять — падает сервер именно во время чтения файла мира, или же по другой причине, а сообщение «краш при загрузке» просто совпало по времени. Открой лог сервера (обычно это консольный вывод процесса valheim_server.x86_64, который панель хостинга пишет в файл вроде server.log или показывает во вкладке «Консоль»). Ищи характерные строки:
World save-file loading complete
Failed to load world '<имя_мира>'
Zone: Cannot load level
Exception in ZoneSystem.Load
Если краш происходит после World save-file loading complete и до полной инициализации ZoneSystem — почти наверняка проблема в самом файле мира. Если сервер вообще не доходит до этой строки и падает сразу после старта — скорее всего дело в BepInEx-плагине, который ломается ещё до подгрузки сохранения. А если процесс живёт минуту-другую и падает при подключении первого игрока — это часто память: сервер тянет террейн и объекты в момент, когда клиент начинает синхронизацию зон вокруг точки спавна.
Держи под рукой блокнот с временными метками — сравнение с логами и краш-репортами по другим играм показывает общий принцип: сначала локализуй момент падения, потом уже причину.
Повреждённый .db и .fwl — самая частая причина
Мир Valheim хранится в двух файлах: <имя_мира>.fwl (метаданные — сид, версия, настройки) и <имя_мира>.db (собственно террейн, постройки, зоны, инвентари). На выделенном сервере они обычно лежат в:
~/.config/unity3d/IronGate/Valheim/worlds_local/
Битый .db — классика после жёсткого килла процесса (OOM-killer, обрыв питания хоста, force-stop из панели во время автосохранения). Игра пишет данные не мгновенно — если процесс убили посреди записи, файл может оказаться усечён или с некорректным чек-каунтом внутри, и при следующей загрузке движок падает в исключении при десериализации зоны.
Проверить гипотезу просто: скопируй пару .fwl/.db к себе на ПК, положи в %appdata%\..\LocalLow\IronGate\Valheim\worlds_local\ (или в путь worlds_local в Steam-версии) и попробуй открыть мир в одиночной игре. Если краш повторяется даже в клиенте — файл действительно повреждён, дело не в серверном окружении.
Поднять сервер Valheim за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверВосстановление из автоматических .old бэкапов
Хорошая новость: Valheim сам держит откат. При каждом сохранении движок перед перезаписью копирует старую версию файла в <имя_мира>.fwl.old и <имя_мира>.db.old (иногда встречается и .old.old — вторая ступень отката). Это твой первый и самый быстрый вариант восстановления:
cd ~/.config/unity3d/IronGate/Valheim/worlds_local/
cp MyWorld.db MyWorld.db.broken
cp MyWorld.fwl MyWorld.fwl.broken
cp MyWorld.db.old MyWorld.db
cp MyWorld.fwl.old MyWorld.fwl
Потеряешь прогресс с последнего автосохранения (обычно это минуты, не часы), зато сервер снова живой. Дедик Valheim принимает при запуске параметры для управления частотой и глубиной автобэкапов — если ты запускаешь сервер сам через shell-скрипт, а не через готовую панель, стоит явно прописать их в команде старта:
./valheim_server.x86_64 -name "MyServer" -port 2456 -world "MyWorld" -password "changeme" \
-backups 4 -backupshort 7200 -backuplong 43200
-backups — сколько версий хранить, -backupshort/-backuplong — интервалы в секундах между короткими и длинными автосохранениями-бэкапами. Если восстановление из .old не помогло (файл был битым уже несколько сохранений подряд), ищи более старую копию в папке backups рядом с миром — туда движок кладёт снапшоты с меткой времени в имени. А если и там пусто — остаётся только штатный бэкап хостинга; в MAATRIX GAMES это делается через панель, подробный процесс восстановления описан в статье про восстановление сервера из бэкапа.
Несовместимость версий после обновления
Valheim активно развивается, и крупные патчи (вроде тех, что меняют генерацию биомов или структуру зон) иногда меняют внутренний формат сохранения. Steam обновляет клиент и сервер автоматически по расписанию — если у тебя авто-апдейт сервера включён, а игроки ещё сидят на старой версии клиента (или наоборот, кто-то из админов откатил сервер вручную через +app_update <id> -beta <ветка> в SteamCMD), при попытке загрузить мир новой версией движка на старом формате данных может вылезти исключение конвертации.
Признак именно этого сценария — в логе фигурирует что-то про version mismatch или WorldGenerator вместо чистого краша ZoneSystem. Что делать:
- Проверь версию сервера и клиента — они должны совпадать посимвольно (номер версии виден в главном меню игры и в логе сервера при старте).
- Если недавно обновлял сервер через SteamCMD вручную, сначала сделай полный бэкап папки
worlds_local, и только потом запускай апдейт — конвертация формата мира обычно необратима в одну сторону. - Если сервер откатывали на старую ветку через
-beta, а мир уже был пересохранён новой версией — вперёд без отката не поедет, придётся поднимать версию обратно.
Единой команды «зафиксировать версию» тут нет — надёжнее всего держать SteamCMD-апдейт сервера под ручным контролем (не в cron, а по факту, когда обновился клиент у всей группы), а не на полном автопилоте.
Конфликт модов через BepInEx
Если сервер модифицирован через BepInEx, крашей на загрузке мира ощутимо больше, потому что плагины часто цепляются именно к событиям инициализации зон и сохранений. Смотри BepInEx/LogOutput.log — там, в отличие от общего лога сервера, видно конкретный стектрейс с именем сборки-виновника (.dll в имени исключения).
Быстрый способ локализовать проблемный мод — бисекция:
- Останови сервер, скопируй папку
BepInEx/pluginsв сторону как бэкап. - Оставь только моды, без которых сервер физически не работает (если такие есть, например серверные фреймворки статов), убери остальное.
- Запусти сервер — если мир грузится, возвращай моды пачками по 2-3 штуки, перезапускай сервер между пачками.
- Как только краш вернулся — сужай последнюю пачку до одного мода.
Особенно часто конфликтуют моды, которые трогают одну и ту же систему одновременно: два разных мода на управление лутом, два конкурирующих оверрайда генерации мира, или мод на постройку, рассчитанный на другую версию Valheim, чем стоит на сервере. Если у тебя ещё нет BepInEx на сервере или хочешь настроить установку модов с нуля — весь процесс пошагово описан в статье про установку BepInEx на сервер Valheim, а конкретные подборки — в материале про моды на строительство.
Нехватка памяти при подгрузке мира
Valheim не самая прожорливая игра по RAM, но требования растут вместе с миром: чем больше игроки настроили (форпосты, вырубленные леса, терраформинг), тем больше данных движок должен держать в памяти при старте и при подгрузке зон вокруг игроков. Базовая рекомендация для дедика — от 4 ГБ RAM, но это именно стартовая планка для свежего мира на 2-4 игроков; для давнего мира с большими постройками и активной группой стоит закладывать заметный запас.
Как отличить нехватку памяти от других причин:
# смотрим на нагрузку в момент краша
free -h
dmesg | grep -i "out of memory"
Если в dmesg (или в логах панели хостинга) находишь упоминание OOM-killer, убившего процесс valheim_server, — вот и причина. Сервер не «крашится» сам по себе в привычном смысле, его убивает ядро ОС, когда процессу не хватило памяти на подгрузку зон.
Варианты решения:
| Ситуация | Что делать |
|---|---|
| Свежий мир, 2-4 игрока, краш стабильно повторяется | Проверь тариф — возможно, реально мало RAM выделено |
| Старый мир с большими постройками | Апгрейд тарифа на бо́льший объём RAM |
| Модифицированный сервер (BepInEx) | Закладывай +20-30% к базовой рекомендации сверху |
| Разовый скачок нагрузки | Проверь swap на хосте, но это временная мера, не решение |
Если ты только выбираешь конфигурацию под новый мир или пересаживаешь старый на другой тариф — базовые шаги разворачивания сервера и рекомендации по ресурсам собраны в статье как поднять сервер Valheim.
Что делать, если ничего из этого не помогло
Если ты прошёл все пункты выше и мир всё равно не грузится — скорее всего, файл повреждён настолько глубоко, что даже .old-версии тоже битые (такое бывает, если проблема на диске хоста, а не в самой игре: проверь SMART/состояние диска, если у тебя выделенный сервер, а не облачный тариф с готовым хранилищем). В крайнем случае можно попытаться восстановить хотя бы часть мира сторонними инструментами для парсинга .db (в комьюнити Valheim такие тулзы периодически появляются и устаревают), но гарантий тут никто не даст — начинать стоит именно со штатных бэкапов хостинга.
Поднять сервер Valheim за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Можно ли открыть .db файл Valheim вручную, чтобы понять, что в нём битое?
Формат бинарный и не документирован официально, ковыряться в hex-редакторе смысла нет. Практичнее — тестовая загрузка в одиночной игре, она либо падает, либо нет.
Автобэкапы .old весят как основной мир — можно ли их отключить?
Технически да, через -backups 0, но тогда единственная страховка от краша — бэкапы хостинга. Отключать не советуем даже на маленьких серверах.
После отката на .old пропали постройки последних игроков — это нормально?
Да, откат откатывает мир к моменту последнего сохранения перед битым файлом, обычно это минуты, реже — до часа при больших интервалах -backupshort.
Мод, который работал месяцами, вдруг стал крашить сервер на загрузке — почему?
Скорее всего, обновился сам Valheim, а мод под новую версию ещё не адаптирован. Проверь страницу мода на Thunderstore/Nexus на предмет свежих обновлений.
Сервер падает только когда заходит конкретный игрок, а не при обычной загрузке мира — это тоже про память?
Не обязательно: иногда дело в повреждённых данных именно в его персональном сохранении на сервере (файл персонажа), а не в мире целиком — попробуй временно исключить его профиль и проверить, грузится ли мир для остальных.