Назад | Перейти на главную страницу

Улавливание не отвечающего / загруженного mysql, возможно, с помощью monit?

У меня возникают периодические появления mysql, вызывающие высокую нагрузку на компьютер, что делает веб-приложение недоступным. Я использую monit для наблюдения за ним, но он не обнаруживает проблемы, по-видимому, потому, что он все еще может подключаться к mysql. Вот мой сценарий мониторинга для mysql:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
    group database
    start program = "/etc/init.d/mysql start"
    stop program = "/etc/init.d/mysql stop"
    if failed port 3306 protocol mysql then restart
    if failed unixsocket /var/run/mysqld/mysqld.sock protocol mysql then restart
    if 5 restarts within 5 cycles then timeout

Когда возникает проблема, нагрузка на машину высока, и mysql занимает почти весь процессор. Вы все еще можете «войти» в mysql, используя mysql инструмент командной строки, но никакие выделения / обновления не отвечают.

Что мне следует использовать, чтобы поймать эту проблему?

Проверьте список процессов через клиент MySQL. (show full processlist;С этого момента вы можете определить, где выполняется запрос и нужна ли оптимизация или ее следует остановить.

С этого момента вы можете kill $NUMBER; для прерывания проблемного соединения вместо перезапуска MySQL.

Перезапуск того, что уже запущено из-за нежелательной операции, должен быть крайней мерой и, как правило, плохой идеей. Особенно с базами данных, так как вы рискуете своими данными.

Конечно, конкретные ситуации диктуют разные действия. Например, если вы знаете, что в конкретном программном обеспечении произошла утечка памяти, операции не выполняются, и единственный способ восстановить ресурсы - это перезапустить: затем сделайте это.

Кроме того, если вы каждую минуту теряете много денег, перезагрузка может быть разумной. Например, если вы не видите пути для быстрого восстановления и думаете, что перезапуск восстановит службу, перезапуск будет иметь смысл, если риск для данных или приложения будет меньше, чем вы активно теряете. Этот принцип применяется, но может незначительно отличаться в зависимости от вашей отрасли, услуг и SLA.

Это могут быть заблокированные таблицы или перегруженный сервер. Попробуйте медленное ведение журнала запросов, а также предложите список процессов Warner (совет: mytop сделает это в удобном интерфейсе). Также попробуйте (обычный) верх, чтобы увидеть, что конкурирует с базой данных за процессор.

Если вы видите высокую «нагрузку» (очередь выполнения) без процессов, потребляющих (много) мощности процессора, это может быть связано с хранилищем. (недостаточно IOPS / пропускной способности)