Если часы сервера разом переводятся на несколько секунд вперёд или назад, таймеры, завязанные на системные часы, срабатывают пачкой или замирают.
Почему Синхронизация времени резко переводит часы → Следствие Таймеры срабатывают пачкой или замирают, таймауты определяются неверно → На экране Сбои баффов и кулдаунов, массовый дисконнект, перемотка
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Считать прошедшее время, таймауты и кулдауны по монотонным часам (monotonic clock), которые не скачут и не идут назад, а wall clock использовать только для отображения и записи в логи.
Команда инфраструктуры: задачи
Корректировать часы плавно (makestep в chrony только сразу после запуска), мониторить состояние синхронизации времени (расхождение часов).
Цифры для ориентира
ntpd переводит часы разом, если расхождение больше 0,128 с, а меньшее расхождение устраняет плавно, со скоростью, при которой на 1 секунду уходит чуть больше 30 минут. Популярный сейчас chrony с рекомендуемой настройкой (makestep) переводит часы разом лишь несколько раз сразу после запуска, а дальше корректирует плавно. Часы скачут и тогда, когда виртуальная машина ненадолго останавливается и снова возобновляет работу.
На графике
Случайные всплески · число срабатываний таймеров и обрывов, журнал коррекций часов
Где смотреть
Найти в логе службы синхронизации времени записи о резкой коррекции часов и сопоставить их со временем сбоев. chrony пишет в syslog, если коррекция больше значения logchange (по умолчанию 1 с)
Подтверждает
В моменты сбоев баффов и кулдаунов, массовых дисконнектов и перемотки есть записи о коррекции часов, и величина коррекции близка к масштабу сбоя
Опровергает
Если записей о коррекции часов нет, причина в другом. Для виртуальной машины проверить и случаи остановки с последующим возобновлением («Обслуживание облачного хоста и живая миграция»)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
ntpd - Network Time Protocol (NTP) daemonNetwork Time Foundation Если расхождение превышает порог шага 128 ms, часы переводятся разом, если меньше, корректируются плавно. Скорость 0,5 ms в секунду, поэтому на 1 секунду уходит 2 000 с (около 33 минут)
chrony – Frequently Asked Questionschrony Рекомендуется разрешать шаговую коррекцию лишь несколько раз сразу после запуска, например makestep 1 3. Виртуальная машина, которую остановили и возобновили, может проснуться с неверным временем