У меня возникают периодические появления 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 / пропускной способности)