OutOfMemoryException이 발생할 때 ASP.NET 앱을 재활용하는 방법

OutOfMemoryException이 발생할 때 ASP.NET 앱을 재활용하는 방법

저는 Server 2019의 IIS에서 실행되는 ASP.NET 앱(.NET 프레임워크 4.8)을 가지고 있습니다. 지난 몇 주 동안 고객이 큰 메모리 블록이 필요한 사이트에서 일부 작업을 수행하려고 시도하는 일이 몇 번 발생했습니다. ASP.NET 런타임은 메모리에서 이렇게 큰 블록을 찾을 수 없으며 OutOfMemoryException을 발생시킵니다. 사이트는 계속 작동하지만 일부 페이지는 작동하고 일부 페이지는 작동하지 않습니다. IIS 응용 프로그램 풀 상태는 모든 것이 괜찮은 것처럼 보이지만 실제로는 풀을 수동으로 재활용할 때까지 대부분의 사이트가 작동하지 않습니다.

전용 바이트가 몇 GB를 초과할 때 응용 프로그램 풀에는 이미 재활용 세트가 있지만 사이트가 작동하지 않을 때 w3wp 프로세스를 보면 몇 백 MB만 사용하고 있습니다. 이 예외가 발생하면 ASP.NET 또는 IIS에 재활용하도록 지시할 수 있는 방법이 있습니까?

답변1

이는 IIS와 애플리케이션에서 외부적으로 모니터링하고 처리해야 합니다. 예약된 작업이 명령줄에서 앱 풀을 중지/시작하기 위한 트리거로 사용할 수 있는 예외가 응용 프로그램 이벤트 로그에 있을 수 있습니다.

이것은 또한 상당히 기본적인 가비지 수집 설정처럼 보입니다. 최소한 모든 애플리케이션은 서버 GC용으로 구성되어야 합니다.

또한 적절한 상태 확인을 용이하게 하기 위해 추가할 수 있는 코드가 있을 수 있습니다. .NET Framework를 강제로 사용하는 페이지를 사용하는 것은 로드 밸런서 상태 확인에 대한 수년간 표준 절차였습니다. 메모리 부족 예외로 인해 응용 프로그램 풀이 충돌한 경우 해당 상태 확인이 실패해야 합니다.

관련 정보