Как отладить медленный сайт в Microsoft Azure - PullRequest
0 голосов
/ 01 февраля 2019

У нас есть веб-сайт, который работает уже почти 3 года.Только 2-3 месяца назад мы внедрили новую функцию «мультиязычность».И сразу после этого мы начали замечать некоторые проблемы с отставанием.Первый был очень серьезным и приводил к тому, что сервер работал почти все время, мы обнаружили где-то в нашем бесконечном цикле (который, как мы думаем, был подхвачен поисковыми роботами, которые застряли там и заняли все ресурсы, и, таким образом, вызвалисервер аварийно завершится).

Однако эта проблема была исправлена, и мы (ПОЛНОСТЬЮ) уверены, что проблема с кодом больше не является причиной этого.Но мы не уверены на 100%.

Время от времени (примечание: чаще, чем пару раз в течение дня) наш сервер (размещенный в Microsoft Azure) будет произвольно занимать около 2-3 минут, прежде чем что-либо делать обратно.Это идет от показа веб-страницы до запросов к нашей базе данных (с использованием MySQL Workbench).Загрузка всего занимает около 2-3 минут.

Мы посмотрели в Google Analytics и наших журналах Apache, чтобы попытаться найти образец, который вызывает эту проблему.Но мы не можем найти какой-либо образец.Ничего необычного не происходит в наших журналах Apache прямо перед тем, как возникает проблема с задержкой.Кроме того, у нас даже возникают проблемы с задержкой, когда на нашем веб-сайте 0 посетителей (по данным Google Analytics).

Наша самая большая таблица mysql содержит около 50 тыс. Записей, так что это даже не такая большая база данных.Всего у нас около 100 столов.

Когда сервер работает нормально, я захожу на mysql и вручную выполняю некоторые из наших «более тяжелых» запросов, чтобы посмотреть, действительно ли они медленные, но ни один из них не занимает больше 0,5 секунд.Но когда сервер отстает, это может легко занять до 30 - 60 секунд.

У нас есть несколько заданий CRON, работающих в фоновом режиме, и, в частности, 2 из них могут вызвать у нас проблемы, но я также очень не уверен в этом.Первый - это рассылка CRON.В нашей базе данных есть очередь, которая содержит все наши электронные письма, и логическое значение 0 или 1, указывающее, отправлено оно или нет.Это задание CRON будет запускаться каждые 5 минут и получать письма с отправкой на 0 и пытаться отправить их.Рядом с этим у нас есть еще одно задание CRON, которое генерирует электронные письма и отправляет их в нашу базу данных пользователей.Это может отправлять до 500 писем за раз (выполняется только один раз в 2 недели).Иногда мы достигаем нашего максимального количества отправляемых писем в день, установленного Outlook.Это приводит к тому, что наши электронные письма просто перестают отправляться на один день, но на следующий день они будут отправлены снова.

Сначала я подумал, может быть, в этом и заключается проблема с заданием CRON по электронной почте, которое выполняется дольше, и задания 2 cron перекрываются.Тем не менее, я провел тест, в котором работа CRON должна была отправить 500 электронных писем, зная, что мы были на пределе, и ни одно из них не должно быть отправлено.Поэтому я позволил заданию CRON запускаться вручную, и примерно через 15 секунд оно было закончено, и ни одно из них не было отправлено.Веб-сайт работал идеально гладко в течение этих 15 секунд.И еще один тест, в котором было отправлено 100 писем (зная, что мы еще не достигли дневного лимита).На создание и отправку всех писем ушло около 20 секунд.Таким образом, совпадение этих заданий CRON очень маловероятно.

Я сейчас сильно застрял.Мы пытаемся связаться с Microsoft и выяснить, могут ли они выяснить, есть ли проблема на их стороне, но пока не повезло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...