Перевод мировых атомарных часов на одну секунду привёл к массовому зависанию серверных приложений

В полночь с 30 июня на 1 июля с целью синхронизации с астрономическим временем Земли эталонные мировые атомарные часы были приостановлены на одну секунду. иными словами в последней минуте оказалось 61 секунда, а на некоторых часах можно было наблюдать волшебное время "23:59:60". Подобный шаг привёл к непредвиденному коллапсу многих приложений и сервисов. Проблема была вызвана зацикливанием из-за неготовности обработать появление лишней секунды, в большинстве систем, на которых проявилась проблема, была настроена синхронизация точного времени по NTP.

В итоге, испытывали проблемы с работой некоторые сайты (в том числе Reddit, LinkedIn и Mozilla), наблюдалось массовое зависание серверных приложений (в основном приложения работающие в Java VM, такие как Hadoop и Cassandra), начинала съедать все процессорные ресурсы СУБД MySQL, отключились VPN-туннели на базе OpеnVPN, зависали Linux-серверы с вручную собранным ядром.

В большинстве случаев администраторы были вынуждены перезапустить зависшие серверы. Тем не менее, для стабилизации некоторых приложений достаточно было вручную выставить корректное время через команду "date `date +"%m%d%H%M%C%y.%S"`" для некоторых систем мог дополнительное потребоваться останов ntpd на время выполнения данной команды и перезапуск пожирающих CPU приложений. Интересно, что в системе отслеживания ошибок Red Hat информация о возможной проблеме была опубликована ещё в 2009 году и исправлена в RHEL 5.4 (дополнительно было опубликовано уведомление, что RHEL не подвержен проблеме). В марте в ядре Linux была выявлена и исправлена проблема с зависанием при появлении лишней секунды на некоторых системах с таймером высокого разрешения.

При этом, добавление лишней секунды для синхронизации времени с периодом вращения земли производится не в первый раз, прошлое прибавление состоялось 31 декабря 2008 года и обошлось без глобальных проблем. В прошлом году внимание к проблеме также пыталась поднять компания Google, поделившись своим методом ухода от проблемы - разбиение лишней секунды на большой интервал корректировки, с прибавлением каждый раз по миллисекунде.

©  OpenNet