Я работаю над сайтом WordPress, который получает около 100 тысяч просмотров страниц в день. Мы используем Varnish для кэширующего слоя. Недавно мы столкнулись с проблемой, при которой производительность MySQL, казалось бы, случайно замедлялась, и наше приложение зависало. Вот график из New Relic для сбоя, произошедшего вчера:
Это произошло дважды за последнюю неделю. Сайт будет работать нормально в течение недели, никто не будет касаться рабочих серверов, а затем это произойдет из ниоткуда. Обычно время отклика составляет около 500 мс, а здесь оно достигает максимума в 60 тыс. Мс (!). Проблема решается остановкой apache, подождите, пока база данных остынет, а затем снова запустите apache.
Дело не в том, что выполняется больше запросов или что выполняется конкретный медленный запрос, вызывающий эту проблему. Если я возьму любой из «медленных запросов», о которых сообщает New Relic, и выполню их в любое другое время, они будут очень быстрыми. Вот график пропускной способности MySQL за тот же период времени:
Я проверил статистику хуков и плагинов WordPress, и все вроде нормально.
У меня вопрос, с чего мне начать искать? Какие настройки MySQL могли вызывать это? Вероятно, это проблема MySQL или скорее проблема приложения?
В дополнение к другим упомянутым инструментам я бы предложил использовать mytop, чтобы увидеть, что делает mysql, когда он замедляется. Он очень похож на топ и показывает статистику, такую как количество запросов в секунду, а также активно выполняющиеся запросы.
У вас все в одной машине? Вы уверены, что ваши серверы не меняются местами? Во время проблемы можете ли вы узнать у top и друзей, связана ли ваша рабочая нагрузка с ЦП / памятью / вводом-выводом?
Вы собираете эти данные? Если не начните установку systat (sar и друзья), чтобы вы могли проверить, что произошло в системе после того, как возникла проблема.
Затем включите медленную регистрацию на PHP и MySQL:
1) https://stackoverflow.com/questions/8560579/how-to-monitor-slow-php-processes
2) https://stackoverflow.com/questions/11606972/how-can-i-enable-slow-query-log-on-my-server
Имея эти данные, вы можете точно определить возможную проблему или лучше понять, что происходит, и лучше настроить свой мониторинг или адаптировать настройки ecc.
Прежде чем перейти к конкретному приложению, я бы начал с основ. Это не займет много времени и усилий.
Начните с некоторых основных / общих задач диагностики сервера. top / iostat / atop / htop / iotop / free / df / vmstat и т.д ... в это время. Сообщите о том, что вы нашли. Мое личное предпочтение atop
для многих вещей (он также работает в фоновом режиме и записывает журнал вроде sysstat). Посмотрите на память, подкачку, ввод-вывод диска, загрузку и т.д ... все.
Затем просмотрите журналы, такие как журнал ядра (или вывод dmesg) и сообщения системного журнала.
Затем посмотрите на mysql и свои веб-службы, когда все остальное ничего не раскрывает.