Я застрял со следующей загадочной проблемой при использовании ASP. NET MVC и IIS. У меня очень простой контроллер:
public class SimpleController : Controller
{
public ActionResult Huge()
{
return Content(new string('a', 3000000));
}
public ActionResult Small()
{
return Content(new string('a', 1000000));
}
}
Если я запускаю этот пример с IIS Express или более сложные примеры с обычным IIS, чем я иногда сталкиваюсь с проблемой, этот запрос к обработчику метода /Huge
просто зависает: в браузере, это похоже на бесконечную загрузку страницы, в Wireshark я видел, что TCP-соединение открылось, но после этого нет активности с сервера (я также пытаюсь делать необработанные запросы с python через requests
lib и в этот случай также зависает для /Huge
обработчика метода). С другой стороны, запросы к обработчику метода /Small
работают нормально.
Я обнаружил, что это поведение стабильно воспроизводится с относительно небольшим объемом свободной оперативной памяти. Но для меня это очень странно: Process Explorer показывает, что доступно не менее 8 ГБ ОЗУ (проблема воспроизводится, когда доступно менее 8 ГБ свободного места, но при большем объеме оба этих контроллера работают нормально)
Я также попытайтесь воспроизвести это поведение с ASP NET Core и сервером Kestrel, и с этой настройкой все работает нормально, и никаких зависаний не произошло.
Кто-нибудь может пролить свет на эту загадочную проблему? В чем причина проблемы и есть ли обходные пути?
Мои конфигурации следующие:
- . NET Framework 4.8
- Windows 10 Pro (версия 1909)
- ОЗУ: 32 ГБ (с включенным свопом фиксированного размера - 24 ГБ)
- Сервер: Microsoft-IIS / 10.0