Как заставить приложение ASP.NET перезапуститься при возникновении исключения OutOfMemoryException

Как заставить приложение ASP.NET перезапуститься при возникновении исключения OutOfMemoryException

У меня есть приложение ASP.NET (.NET framework 4.8), которое работает в IIS на Server 2019. За последние несколько недель случалось несколько раз, что клиент пытался выполнить какую-то операцию на сайте, требующую большого блока памяти. Среда выполнения ASP.NET не могла найти такой большой блок в памяти и выдавала исключение OutOfMemoryException. Сайт продолжает работать, но некоторые страницы работают, а некоторые нет. Состояние пула приложений IIS выглядит так, как будто все в порядке, но на самом деле большая часть сайта не работает, пока я вручную не перезапущу пул.

В пуле приложений уже установлена ​​переработка, когда частные байты превышают несколько ГБ, но при просмотре процесса w3wp, когда сайт не работает, он использует всего несколько сотен МБ. Есть ли способ указать ASP.NET или IIS перерабатывать, когда выдается это исключение?

решение1

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

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

Кроме того, вероятно, есть код, который можно добавить для обеспечения надлежащей проверки работоспособности. Стандартной процедурой на протяжении многих лет было использование страницы для проверки работоспособности балансировщика нагрузки, которая принудительно использует .NET Framework. Эта проверка работоспособности должна завершиться неудачей, если пул приложений рухнул из-за исключения нехватки памяти.

Связанный контент