Диагностика спорадических блокировок в веб-сайте, работающем на IIS - PullRequest
0 голосов
/ 15 апреля 2019

Цель

Определите причину спорадических блокировок нашего веб-приложения, работающего на IIS.

Проблема

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

Окружающая среда и применение

Приложение работает на 4 разных компьютерах с Windows Server 2016. Машины уравновешены нагрузкой, используя ha-proxy, используя схему балансировки нагрузки по кругу. Пулы приложений IIS, на которых размещен этот веб-сайт, настроены на работу по 4 рабочих в каждом, а приложение, которое он размещает, является 32-разрядным приложением. Экземпляры IIS не используют общий файл конфигурации, но все пулы приложений для этого приложения настроены одинаково.

Это приложение является единственным приложением в пуле приложений IIS. Приложение является веб-API ASP.NET и использует .NET 4.6.1. Приложение не создает собственных потоков.

Теория

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

У меня нет доступа к машинам лично, поэтому наша системная команда получила дампы памяти приложения, когда это произошло. В дампах я обычно вижу ~ 50 работающих потоков, и все они в нашем коде. Эти потоки будут распространяться по всему нашему приложению и, по-видимому, не будут останавливаться на каком-либо общем фрагменте кода. Когда приложение работает правильно, в дампах работает 3-4 потока. Кроме того, я посмотрел на счетчики производительности, такие как ASP.NET \ Requests Queued, но, похоже, он никогда не помещал никаких запросов в очередь. В это время загрузка процессора, памяти, диска и сети выглядит нормально. При использовании windbg ни один из потоков, похоже, не загружается слишком долго, кроме потока финализатора, который, насколько я знаю, должен работать все время.

Заключение

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

1 Ответ

0 голосов
/ 03 мая 2019

Итак, эта проблема возникла в нашем приложении, использующем запрос в stitch для таблицы с 2 000 000 записей в другой таблице. Память станет настолько фрагментированной, что сборщик мусора будет тратить больше времени на поиск мест для размещения объектов и их перемещение, чем на наш код. Вот почему оказалось, что наше приложение все еще работает и почему их не было исключением. Как ни странно, IIS задерживал запросы, но продолжал обрабатывать потоки.

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