저는 Server 2019의 IIS에서 실행되는 ASP.NET 앱(.NET 프레임워크 4.8)을 가지고 있습니다. 지난 몇 주 동안 고객이 큰 메모리 블록이 필요한 사이트에서 일부 작업을 수행하려고 시도하는 일이 몇 번 발생했습니다. ASP.NET 런타임은 메모리에서 이렇게 큰 블록을 찾을 수 없으며 OutOfMemoryException을 발생시킵니다. 사이트는 계속 작동하지만 일부 페이지는 작동하고 일부 페이지는 작동하지 않습니다. IIS 응용 프로그램 풀 상태는 모든 것이 괜찮은 것처럼 보이지만 실제로는 풀을 수동으로 재활용할 때까지 대부분의 사이트가 작동하지 않습니다.
전용 바이트가 몇 GB를 초과할 때 응용 프로그램 풀에는 이미 재활용 세트가 있지만 사이트가 작동하지 않을 때 w3wp 프로세스를 보면 몇 백 MB만 사용하고 있습니다. 이 예외가 발생하면 ASP.NET 또는 IIS에 재활용하도록 지시할 수 있는 방법이 있습니까?
답변1
이는 IIS와 애플리케이션에서 외부적으로 모니터링하고 처리해야 합니다. 예약된 작업이 명령줄에서 앱 풀을 중지/시작하기 위한 트리거로 사용할 수 있는 예외가 응용 프로그램 이벤트 로그에 있을 수 있습니다.
이것은 또한 상당히 기본적인 가비지 수집 설정처럼 보입니다. 최소한 모든 애플리케이션은 서버 GC용으로 구성되어야 합니다.
또한 적절한 상태 확인을 용이하게 하기 위해 추가할 수 있는 코드가 있을 수 있습니다. .NET Framework를 강제로 사용하는 페이지를 사용하는 것은 로드 밸런서 상태 확인에 대한 수년간 표준 절차였습니다. 메모리 부족 예외로 인해 응용 프로그램 풀이 충돌한 경우 해당 상태 확인이 실패해야 합니다.