Если из-за бага тик не заканчивается, сервер встаёт, и watchdog принудительно его перезапускает.
Почему Из-за ошибочного условия цикл не завершается, или рекурсия уходит вразнос → Следствие Тик не заканчивается, сервер стоит → На экране Фриз, затем дисконнект у всех
Основной ответственный Команда разработки · Разработка сервера
Команда разработки: задачи
Ограничить число итераций, поставить watchdog, написать тесты, воспроизводящие проблемный ввод.
На графике
Массовый обрыв соединений · число подключений, CPU по потокам
Где смотреть
Во время зависания посмотреть CPU по потокам через pidstat -t 1 и проверить через perf top -t (ID потока) или gdb, в какой функции крутится поток на 100%. Если сервер уже перезапущен, искать записи о срабатывании watchdog (WatchdogSec в systemd, проваленная liveness-проверка в Kubernetes)
Подтверждает
Пока сервер стоит, один игровой поток держится на 100% CPU, а его стек всё время крутится внутри одной функции или цикла
Опровергает
Если во время зависания загрузка CPU близка к 0, дело в дедлоке или ожидании внешнего ответа
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
systemd.service(5) — Linux manual pagesystemd WatchdogSec=: если сервис не отправит сигнал жизни (WATCHDOG=1) за заданное время, он считается сбойным и завершается, а затем в зависимости от настройки Restart= автоматически перезапускается
Liveness, Readiness, and Startup ProbesKubernetes Состояние, когда приложение работает, но не продвигается, ловят liveness-проверкой и перезапускают. По умолчанию проверка идёт каждые 10 секунд, а после 3 неудач подряд следует перезапуск