Сайт ASP.NET перестает отвечать на запросы под нагрузкой
У нас есть продукт из двух компонентов. Веб-сайт API, размещенный под IIS 8, который я называю API. Этот сайт предоставляет услуги нескольким сайтам, однако на данный момент его использует только один веб-сайт. Другим компонентом этого сайта является сайт ASP.NET MVC (.NET 4), который на данный момент является единственным клиентом сайта API. Давайте назовем это WEB.
Когда мы развернули API и WEB на одном сервере с производственной мощностью, все было хорошо, пока число одновременных пользователей не превысило 16! Затем сайт перестал отвечать на запросы, что означает, что мы не получили ошибки Timeout (или каких-либо других), и браузер ждал ответа навсегда.
Мы воспроизвели ту же проблему в нашей промежуточной среде, используя веб-сайт онлайн-тестирования нагрузки. Снова сайт перестает отвечать на запросы, когда число одновременно работающих пользователей превышает 12 или 16 (или выше).
Когда это происходит, сайт умирает примерно на 10 минут, а затем становится отзывчивым. Я полагаю, это из-за того, что опрос приложений был переработан?
Вопрос в том, как я могу узнать, находится ли проблема в API или в WEB? Тогда в чем может быть проблема? WEB полностью полагается на API и не подключается к каким-либо базам данных напрямую, но API использует MySql в AWS.
3 ответа
Как отмечали некоторые пользователи, проблема заключалась в исчерпании потока (так называемый конфликт потоков). Мы попытались определить и исправить любой код, который может блокировать потоки. Мы также внесли множество улучшений в производительность API и уровня сайта, чтобы потоки быстро заканчивались. Наконец, мы развернули сайт в производственной среде и получили приемлемую производительность.
Вы пытались добавить больше рабочих процессов в IIS в appools? У нас были некоторые проблемы с сайтом MVC, которые мы исправили, просто добавив больше рабочих процессов.
Вы смотрели на то, что поглощает все ваши ресурсы? Не исчерпана ли память? Процессор исчерпан? Где ваша горлышко от бутылки? 16 пользователей ни в коем случае не должны поглощать все потоки в пуле приложений. Я предполагаю, что какой-то процесс пожирает всю вашу память на сервере, что делает его не отвечающим. Узнайте, что это за процесс, с помощью Process Explorer или любой программы, которая контролирует ресурсы вашего сервера.