MySQL ест все ресурсы процессора, даже если нет запросов к нему? Вот решение проблемы

Предыстория.
Почти два месяца меня мучала проблема — ну очень долго работал этот блог.
Что я только ни оптимизировал, что ни профилировал, не помагало.
Перезапускал все важные службы — ничего.
Профилировщик говорит, что все запросы к MySQL на странице отрабатывают меньше чем за 1 секунду, а страница грузится секунд 25-30, при этом если страница грузится из кэша — несколько секунд.

Думал всякое, даже с DNS игрался — не помагало.
И самое странное, что я не мог связать это ни с какими действиями на сервере.
В итоге оказался баг в службе ntpd, который приводил к проблемам в ядре, что приводило к отжиранию почти всего процессорного времени службой mysqld, причём даже при отсутствии запросов к нему. Активировался баг после сдвига времени (Leap second привёл к зависанию некоторых серверов на Linux).
Актуальная на момент написания версия am-linux (для ec2) пробему автоматом не решает.

В итоге помагает запуск следующего скрипта —

т.е.

В общем, достаточно при выключенном ntpd поменять системное время. Также помогает перегрузка сервера.
Вот ссылка на статью и обсуждение: http://blog.mozilla.org/it/2012/06/30/mysql-and-the-leap-second-high-cpu-and-the-fix/
Что в итоге получаем:

Посмеивался над коллегой, который говорил, что надо подготовиться к сдвигу мирового времени на секунду, а как оказалось, зря.

LEAVE A COMMENT