Краш при телепортации между картами
Кластер из нескольких карт ARK настроен, обелиски и порталы стоят на местах, игроки радостно бегают между The Island и Scorched Earth — и вдруг у кого-то краш прямо в момент перехода. Экран чернеет, клиент вылетает в рабочий стол, а персонаж потом либо не появляется на целевой карте, либо появляется без части инвентаря. Разберём по шагам, где искать причину и как чинить кластер, чтобы телепортация между картами работала предсказуемо.
Содержание
- Как вообще устроена передача персонажа между картами
- Проверка ClusterID: самая частая причина
- ClusterDirOverride: где физически лежат файлы передачи
- Нехватка ресурсов на целевом сервере
- Повреждённые данные существа или инвентаря
- Диагностика по логам: с чего начинать разбор
- Настройка тестового перехода без риска для боевых игроков
Как вообще устроена передача персонажа между картами
Кластер ARK — это не один сервер с несколькими картами внутри, а несколько независимых процессов ShooterGameServer, каждый со своей картой, которые договариваются между собой через общую директорию кластера. Когда игрок заходит в обелиск или портал, сервер-источник не «телепортирует» персонажа напрямую на другой сервер — он сохраняет снимок игрока (профиль, инвентарь, иногда прирученных существ) в файл в общей директории кластера, а сервер назначения при следующем входе игрока читает этот файл и разворачивает состояние у себя.
Отсюда и три главных класса причин краша: сервера не видят друг друга как единый кластер (не совпадает ClusterID), не могут физически прочитать/записать файл передачи (проблема с ClusterDirOverride), либо файл передачи прочитан, но целевой сервер не может корректно принять данные — тут уже дело либо в ресурсах, либо в повреждённых данных самого профиля.
Важно понимать: клиентский краш при переходе — это почти всегда симптом на стороне сервера назначения, а не сервера-источника. Источник своё дело сделал (сохранил снимок), а вот принимающий сервер либо не готов, либо спотыкается о сами данные.
Проверка ClusterID: самая частая причина
ClusterID — это идентификатор, который объединяет отдельные серверы в один логический кластер. Указывается в команде запуска через параметр -ClusterID=<имя>. Если хотя бы один сервер в связке запущен с другим значением (или вообще без параметра) — с точки зрения остальных серверов он не часть кластера, и передача персонажа туда либо не сработает вовсе (сервер откажет в переходе на этапе выбора обелиска), либо, что хуже, начнётся переход, но целевой сервер не найдёт данные — и вы получите краш или зависание на экране загрузки.
Проверьте команду запуска (или юнит systemd, или конфиг панели) на всех серверах кластера — значение -ClusterID должно быть идентичным посимвольно, с учётом регистра:
ps aux | grep ShooterGameServer
Или, если сервера запущены через systemd-юниты, посмотрите строку ExecStart в каждом:
cat /etc/systemd/system/ark-server-theisland.service | grep ExecStart
cat /etc/systemd/system/ark-server-scorched.service | grep ExecStart
Пример корректной пары для двух карт одного кластера:
./ShooterGameServer TheIsland?listen?SessionName=MyCluster-Island?ClusterID=maatrix-cluster-01 -server -log -clusterid=maatrix-cluster-01
./ShooterGameServer ScorchedEarth_P?listen?SessionName=MyCluster-Scorched?ClusterID=maatrix-cluster-01 -server -log -clusterid=maatrix-cluster-01
Обратите внимание: ClusterID встречается и как параметр карты (?ClusterID=...), и как отдельный флаг командной строки (-clusterid=...) — на практике надёжнее продублировать оба варианта. Один лишний пробел, опечатка в имени или разный регистр («MyCluster» вместо «mycluster») — и сервера формально в разных кластерах, хотя выглядят одинаково на первый взгляд.
Поднять сервер ARK: Survival за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверClusterDirOverride: где физически лежат файлы передачи
Второй по частоте виновник — путь к общей директории кластера, задаваемый параметром -ClusterDirOverride=<путь>. Если этот параметр не задан явно, ARK использует директорию по умолчанию внутри профиля сервера, и на разных серверах кластера (даже на одной машине, не говоря уже про разные VPS) она может физически не совпадать — тогда сервер-источник пишет файл передачи в одно место, а сервер назначения ищет его в другом. Итог: игрок «застревает» на экране загрузки, либо клиент получает от сервера назначения ошибку и вылетает.
Что обязательно проверить:
- Путь совпадает на всех серверах кластера. Если кластер размещён на одном физическом сервере (несколько процессов ARK на одной машине под разными портами) — это самый простой случай, задайте один и тот же абсолютный путь везде:
-ClusterDirOverride=/home/arkserver/cluster-shared
- Директория существует и доступна на запись от пользователя, из-под которого запущен процесс сервера:
mkdir -p /home/arkserver/cluster-shared
chown arkserver:arkserver /home/arkserver/cluster-shared
chmod 750 /home/arkserver/cluster-shared
- Если сервера кластера физически на разных машинах (например, разные VPS под разные карты) — общая директория обязана быть на реально общем хранилище (сетевая ФС, смонтированный общий диск), потому что локальная папка на сервере А физически недоступна серверу Б. Это частая ловушка при масштабировании: настройка, которая работала на одном сервере с несколькими картами, ломается при переезде одной из карт на отдельную машину, потому что
ClusterDirOverrideпродолжает указывать на локальный путь.
Проверить, что файлы передачи вообще появляются, просто: зайдите в обелиск, попробуйте переход и сразу посмотрите в директорию кластера:
ls -la /home/arkserver/cluster-shared/
Если после попытки перехода там не появился новый файл (обычно с именем вида <SteamID>.arktribe или похожим, плюс служебные файлы) — проблема на стороне записи (права доступа или неверный путь на сервере-источнике). Если файл появился, но переход всё равно крашит — смотрите дальше, в сторону сервера назначения.
Нехватка ресурсов на целевом сервере
Если ClusterID и ClusterDirOverride в порядке, файл передачи создаётся, но краш всё равно происходит именно в момент захода на целевую карту — вероятно, целевой сервер физически не готов принять игрока в момент попытки.
Два типичных сценария:
- Целевой сервер перегружен. Активная карта с 20+ игроками, десятками прирученных существ и крупной застройкой уже потребляет заметную долю RAM и CPU на обработку тиков. Заход нового игрока через кластер — это дополнительная нагрузка (подгрузка чанка местности вокруг обелиска, спавн персонажа со всем инвентарём), и если сервер уже находится на грани по памяти, эта операция может вызвать краш или зависание. Проверьте потребление памяти в момент попытки перехода:
free -h
top -b -n 1 | grep ShooterGameServer
Если свободной памяти впритык — это симптом, что серверу кластера в целом (или конкретно целевой карте) не хватает выделенных ресурсов, и решение тут не в конфигах, а в апгрейде VPS под эту карту.
- Целевой сервер ещё не полностью запустился. Если сервера кластера рестартуют одновременно (например, все по расписанию в одно окно через cron) или целевой сервер только что перезапустился после падения, у него уходит несколько минут на инициализацию мира — а обелиск на сервере-источнике может уже показывать целевую карту как «онлайн» по факту открытого порта, хотя мир там ещё не догрузился. Попытка телепортации в этот момент чаще ловит именно краш клиента, чем внятную ошибку.
Практический совет: разнесите время рестартов серверов кластера по расписанию, чтобы они не перезапускались одновременно. Настройку регулярных бэкапов и технических окон удобно свести в одно расписание — см. автобэкапы игрового сервера.
Повреждённые данные существа или инвентаря
Самый редкий, но и самый неприятный случай: и ClusterID совпадает, и директория доступна, и ресурсов на целевом сервере хватает, а краш всё равно повторяется стабильно для конкретного игрока или конкретного переносимого существа. Это обычно означает, что файл передачи (снимок профиля или существа) физически повреждён — например, из-за того, что запись файла прервалась на середине (сервер-источник крашнулся или был убит через kill -9 в момент сохранения снимка), либо сам инвентарь игрока содержит предмет с некорректными данными (нередко встречается после кривого мода, который менял структуру предметов, а потом был отключён).
Признаки именно этого случая:
- Краш повторяется у одного и того же игрока при попытке перейти именно с определённым существом или предметом в инвентаре, а без них переход проходит нормально.
- В логе целевого сервера (
ShooterGame/Saved/Logs/) в момент краша видны ошибки парсинга или ассерты, связанные с классом конкретного предмета/существа, а не общие сетевые обрывы. - Проблема не лечится ни рестартом серверов, ни проверкой прав на директорию кластера.
Штатного способа «почистить» один битый файл передачи без потерь у ARK нет — можно вручную удалить конкретный файл передачи игрока из ClusterDirOverride, тогда персонаж на целевой карте просто не примет этот снимок (игрок потеряет то, что нёс в этой попытке перехода, но сможет зайти). Если же повреждение уже просочилось в основной сейв целевой карты и краш происходит не только при заходе через портал, а постоянно на этой карте — остаётся только откат сервера к более ранней резервной копии. Порядок действий — в статье восстановление сервера из бэкапа: практика.
Диагностика по логам: с чего начинать разбор
Если не понятно, к какой из трёх категорий выше относится ваш случай, начните с логов обоих серверов — источника и назначения — сразу после воспроизведения краша:
tail -n 200 /home/arkserver/ark-server-theisland/ShooterGame/Saved/Logs/ShooterGame.log
tail -n 200 /home/arkserver/ark-server-scorched/ShooterGame/Saved/Logs/ShooterGame.log
Что искать в первую очередь:
| Что видите в логе | На что это указывает |
|---|---|
| Сервер-источник не упоминает попытку сохранения снимка при переходе | Игрок не дошёл до перехода — проверьте порты и доступность обелиска, это не проблема кластера |
| Целевой сервер молчит про приём файла кластера | Не совпадает ClusterID или ClusterDirOverride указывает не туда |
Целевой сервер пишет про нехватку памяти / OOM-killer в dmesg | Ресурсная проблема на целевом сервере |
| Ошибка парсинга конкретного класса предмета/существа | Битые данные в файле передачи |
Команда dmesg | tail -n 50 на целевом сервере сразу после краша тоже полезна — если процесс ShooterGameServer был убит ядром из-за нехватки памяти (OOM-killer), там будет прямая запись об этом, и тогда вопрос закрывается однозначно в пользу ресурсов, а не конфигов кластера.
Настройка тестового перехода без риска для боевых игроков
Прежде чем разбирать боевой краш методом проб и ошибок на живых игроках, воспроизведите переход в контролируемых условиях. Заведите тестового персонажа с минимальным инвентарём (без прирученных существ) и попробуйте перейти на целевую карту, когда она точно не перегружена (низкий онлайн, сервер давно запущен). Если тестовый переход проходит гладко — проблема в ресурсах при пиковой нагрузке или в данных конкретного игрока, а не в базовой настройке кластера. Если крашит даже пустой тестовый переход — почти наверняка дело в конфигурации самого кластера, возвращайтесь к первым двум разделам.
Полезно держать под рукой и базовую документацию по картам и запуску — если кластер только настраивается или один из серверов пересобирается с нуля, свежая пошаговая инструкция здесь: как поднять сервер ARK: Survival.
Поднять сервер ARK: Survival за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Обязательно ли использовать одинаковый ServerAdminPassword на всех картах кластера?
Не обязательно для самой передачи персонажей — на неё влияют только ClusterID и ClusterDirOverride. Но для удобства администрирования (единый RCON-доступ ко всем картам) одинаковый пароль практичнее.
Можно ли собрать кластер из карт ARK: Survival Evolved и ARK: Survival Ascended вместе?
Нет, это технически разные игры с разным движком и форматом сохранений — кластер работает только между картами одной и той же версии игры.
Сколько времени должен занимать переход между картами в норме?
Обычно от нескольких секунд до минуты в зависимости от того, насколько загружен целевой сервер и сколько данных переносится (существо с полным инвентарём дольше пустого персонажа). Если переход стабильно занимает несколько минут даже без краша — это тоже сигнал приглядеться к ресурсам целевого сервера.
Что если краш происходит только у части игроков, а не у всех?
Это почти всегда указывает на повреждённые данные конкретного профиля/существа, а не на общую конфигурацию кластера — общая проблема (ClusterID, директория) ловит всех одинаково.
Нужно ли перезапускать все серверы кластера после изменения ClusterDirOverride?
Да, изменения командной строки запуска применяются только при перезапуске конкретного процесса — обновите путь и перезапустите каждый сервер кластера по очереди, не одновременно, чтобы не ловить второй пункт из раздела про нехватку ресурсов.