Рейтинг:0

Что может вызвать блокировку запросов в IIS?

флаг gl

Я использую IIS на Windows Server 2016 с MySQL и PHP на двух почти идентичных серверах. Недавно я заметил замедление работы одного из двух моих серверов, но это происходит только тогда, когда мой сайт пытается выполнить несколько экземпляров скрипта одновременно. Они как бы прилипают друг к другу.

Прекрасным примером является моя страница поиска. Когда пользователь вводит поисковый запрос, при каждом нажатии клавиши (после второй буквы) выполняется поиск, если с момента последнего нажатия клавиши прошло не менее 200 мс. Поэтому, если вы печатаете быстро, он выполняет только один поиск в конце, но для более медленных печатающих (тех, кто ждет более 200 мс между нажатиями клавиш) это вызовет несколько вызовов результатов поиска. Смотрите этот скриншот.

ПЛОХОЙ СЕРВЕР введите описание изображения здесь

Обратите внимание на все ожидающие запросы, и на этом снимке экрана первый из них завершился через 19,08 секунды. Явно слишком долго. К тому времени, когда они все закончат, у них будет более 15 секунд, чтобы вернуть простой набор результатов.

ПЛОХОЙ СЕРВЕР введите описание изображения здесь

Имейте в виду, что эти запросы занимают всего доли секунды при запуске в MySQL Workbench, а также при запуске на другом моем сервере, который не страдает от этой проблемы. Посмотрите на этом скриншоте (с хорошего сервера) точно такой же поиск возвращается через четверть секунды.

ХОРОШИЙ СЕРВЕР введите описание изображения здесь

Мне кажется, что (на плохом сервере) они не могут выполняться одновременно по какой-то причине, потому что, если я выполняю только один поиск (набрав достаточно быстро, чтобы вызвать только один поиск), он возвращается быстро, но если я выполнить несколько таких, они все застревают, как в пробке. Что может быть причиной этого?

На следующем снимке экрана показан результат, если я запускаю только один поиск на плохом сервере. Как видите, он возвращается очень быстро. Таким образом, проблема возникает только при одновременном выполнении нескольких одинаковых скриптов.

ПЛОХОЙ СЕРВЕР введите описание изображения здесь

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

  • В PHP я увеличил post_max_size = 500M
  • В PHP я увеличил upload_max_filesize = 500M
  • В IIS я увеличил UploadReadAheadSize до 49152000.
  • В IIS я увеличил максимально допустимую длину содержимого до 300000000.

Возможно, я сделал другие изменения на этом сервере, которые я не могу вспомнить.

ВРЕМЕННОЕ ИСПРАВЛЕНИЕ

Я могу смягчить эту проблему, установив более длительную задержку между нажатиями клавиш при поиске, и я сделал это, увеличив ее до 800 мс, поэтому даже медленно печатающие не видят этой проблемы, но это только временное решение, а не решить основную проблему, которая также влияет на другие области моего сайта.

ЧТО Я ПРОБОВАЛА

До сих пор я подтверждал, что моя конфигурация IIS, конфигурация MySQL (my.ini) и моя конфигурация PHP (php.ini) идентичны во всех отношениях, которые имеют значение на обоих серверах (по крайней мере, насколько это кажется мне очевидным) . Я также подтвердил, что операторы select, которые я запускаю в этом поиске, работают одинаково хорошо на обоих серверах, если я выполняю их в MySQL Workbench. Это только в моем веб-приложении, где у меня есть эта проблема.

На всякий случай я временно отменил два изменения, внесенные в IIS для загрузки больших файлов, но, похоже, это не имело никакого значения.

Я также загрузил и установил LeanSentry, который один или два раза в день предупреждает меня о том, что мой сайт видел заблокированные запросы, что, как я полагаю, именно то, что я вижу здесь, но, к сожалению, LeanSentry может только точно определить источник проблемы с ASP. страницы, а не PHP. Таким образом, это, по сути, только подтверждает для меня, что есть проблема, но больше ничем помочь мне не может.

ДРУГИЕ СИМПТОМЫ

Я вижу похожие проблемы, если одновременно открываю несколько отчетов. Если я позволю завершить загрузку одного отчета перед открытием следующего, все они загружаются быстро, но если я заставлю свое приложение открывать несколько отчетов одновременно, все они зависнут.

Что может быть причиной этой проблемы узкого места?

Wilson Hauck avatar
флаг jp
Пост с БЫСТРОГО и МЕДЛЕННОГО сервера, Запрос дополнительной информации. Размер оперативной памяти, количество ядер, какие-либо устройства SSD или NVME на серверах MySQL? Опубликуйте на pastebin.com и поделитесь ссылками. Из вашего корня входа SSH, текстовые результаты: B) ПОКАЗАТЬ ГЛОБАЛЬНЫЙ СТАТУС; минимум через 24 часа UPTIME C) ПОКАЗАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ; D) ПОКАЗАТЬ ПОЛНЫЙ СПИСОК ПРОЦЕССОВ; д) СТАТУС; не ПОКАЗАТЬ СТАТУС, просто СТАТУС; F) заполнить отчет www.MySQLTuner.pl (perl) или аналогичный. G) ПОКАЗАТЬ СТАТУС INNODB ДВИГАТЕЛЯ; для анализа настройки рабочей нагрузки сервера, чтобы предоставить предложения.
Wilson Hauck avatar
флаг jp
Задействован ли движок FEDERATED?
флаг gl
@WilsonHauck Нет, не в этом случае. На самом деле я полностью отказался от федеративных таблиц. Как вы знаете, они создавали слишком много проблем. :-)
Wilson Hauck avatar
флаг jp
Отлично. Хороших выходных.
Рейтинг:0
флаг gl

Оказывается, зависание было вызвано рендерингом HTML. Когда мои результаты поиска были длинными, браузеру требовалось много времени для отображения всего HTML, и пока он это делал, он не мог обработать следующий запрос.

Я решил проблему, ограничив результаты поиска 50 строками, поэтому теперь HTML отображается почти мгновенно, и следующий запрос может быть выполнен. Так что не IIS блокировал запросы, а браузер.

Рейтинг:0
флаг us

Я думаю, что это не сервер IIS, здесь есть проблемы, каждая вещь, которую вы ищете, вы запрашиваете новый вызов в своем коде, и это выглядит как что-то внутри вашего PHP-скрипта, это занимает много времени.

Каждый раз, когда вы отправляете новый запрос, вы просто блокируете новые моменты PHP, и когда PHP заканчивается, происходит сбой.

Трудно понять, что вы делаете внутри своего поискового PHP-файла, но я думаю, что вы звоните на какой-то SQL-сервер или что-то еще для поиска. Можете ли вы попробовать закомментировать поисковый запрос внутри кода и провести такой же тест?

Прямо сейчас я просто предполагаю, насколько могу, это звучит так, как будто вы используете регулярное выражение или подобную функцию в своей базе данных SQL, и когда у вас много строк, очень медленно выполнять вызов, поэтому он много зависает.

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

флаг gl
Я попытаюсь прокомментировать некоторый код, чтобы посмотреть, смогу ли я еще его изолировать, но, как я сказал в своем OP, сами вызовы select выполняются быстро, если я запускаю их в MySQL Workbench или если я запускаю только один поиск.

Ответить или комментировать

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