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

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

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

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

#!/bin/bash
# this is a quick-fix to the 6/30/12 leap second bug

if [ ! -f /tmp/leapsecond_2012_06_30 ]
then
/etc/init.d/ntpd stop; date -s "`date`" && /bin/touch /tmp/leapsecond_2012_06_30
fi

т.е.

touch ~/leap-second.sh
nano ~/leap-second.sh
[здесь вставить указанный выше текст]
chmod +x ~/leap-second.sh
sudo ~/leap-second.sh

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

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

LEAVE A COMMENT