64 비트.NET Framework 실행 되는 관리 되는 응용 프로그램에서 메모리 부족 예외

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:3152158
현상
4.6.1의 64 비트 Microsoft.NET Framework 대상으로 하는 관리 되는 응용 프로그램을 할 수 있습니다. 이 응용 프로그램 다음 특정 메시지를 사용 하 여 CLR에서 메모리 부족 예외를 throw 합니다.

OutOfMemoryException: "메모리가 부족 합니다 실행 프로그램을 지정 된 주소 공간 범위 내에서."
원인
이 메모리 부족 예외 코드 관리자 하위 시스템 점프 스텁을 특정 주소 공간 범위 내에서 메모리를 할당할 수 없습니다 하는 경우 CLR에서 전파 됩니다. (스텁 점프이 2GB 이상 떨어져 주소 공간에 있는 Dll에서 호출 하는 메서드에 해당 합니다.) 호출 하는 메서드에서 64 비트 메서드 호출에 대 한 점프 스텁을 저장의 2GB 사정거리 내의 공간 이어야 합니다. 이 특정 오류를 복구 하려면 응용 프로그램에 대 한 안전한 방법은 없습니다. 따라서이 오류가 발생 한 후 응용 프로그램의 상태를 알 수 없는 고 간주할 수 손상. 복구할 수 있는 유일한 방법은 응용 프로그램을 다시 시작 하는 것입니다.
해결 과정
이 문제를 해결 하려면 다음 설정 중 하나를 사용 합니다.
  • 다음 레지스트리 키와 값을 추가 하 여 컴퓨터 전체 설정을 구현 합니다.

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

    NGenReserveForjumpStubs= dword:00000005

  • 응용 프로그램 수준의 설정을 추가 하 여 구현 (또는 병합) 응용 프로그램 구성 파일에 다음 섹션:
    <configuration>    <runtime> <NGenReserveForJumpStubs value="5" />    </runtime></configuration>
설명: NGenReserveForJumpStubs 사용 하면 CLR 점프 스텁을 로드 된 NGen 이미지 각 근처 주소 공간의 비율입니다. 값이 5 이상인이 OutOfMemory 예외가 발생 하는 경우 사용 하는 것이 좋습니다.
추가 정보

개발자를 위한

  • .NET Framework 메서드를 인코딩하여로 성능상의 이유로 상대 32 비트 이동 합니다. 64 비트 시스템에서 호출자와 호출 수신자 수 추가로 2gb (주소 공간)에서 떨어져. 부호 있는 32 비트 오프셋 주소 범위를 초과한이.NET 점프 스텁을 호출자의 2GB에서 만들어집니다. 이 스텁 수 점프 다음 "long"으로 이동할 곳 64 비트 주소 공간에서 확인 합니다.
  • NGen과 JIT 완화 요소는 약간 다르게 작동합니다. 둘 다 예약 추가 주소 공간, 그러나 두 문자가 다른 곳이 예약 포인트.
  • NGenReserveForJumpStubs는 가상 NGen 이미지 크기 (백분율percentReserveForJumpStubs).
  • 일반적인 점프 stub는 12 바이트입니다. 자세한 내용은 참조 하십시오. JUMP_ALLOCATE_SIZE.
  • 메모리 할당 되 고 예약 가까이 NGen 이미지를 로드 하는 주소 (정확한 알고리즘은 EEJitManager::EnsureJumpStubReserve). 점프 stub을 할당할 필요가 있을 때와 다른 적합 한 주소 공간이 없을 때 메모리가 커밋됩니다.
  • 앞에서 언급 한 완화 NGen 이미지의 내용을 수정 하지 않습니다. NGen 이미지는 사용 하거나 완화 하지 않고 동일한 디스크 공간.
  • 현재 응용 프로그램이 점점 한계에 근접 하는 시기를 감지 하는 마땅한 방법이 없습니다입니다. 예약 된 공간에 충분 한 있는지 확인 하려면 OutOfMemoryException을 모니터링 해야 합니다.
  • 이 특정 오류를 호출자의 2GB의 주소 범위가 반경 내에서 메모리의 사용 가능 여부는 관련이 있기 때문에 많이 사용 되지 않는 메모리는 경우에는 OutOfMemoryException을 나타날 수 있습니다.
  • 위에서 설명한 문제에 연관 되지 않을 수 있습니다 때문에, CodeHeapReserveForJumpStubs의 기본값을 변경 안. 우리가 본 적이 없는 경우 실제 응용 프로그램 문제를 해결 하려면이 설정을 변경할 것이 있는.
  • NGenReserveForJumpStubs을 상당히 높게 설정 성능 저하 및 기타 미묘한 문제에 노출 될 위험이 발생할 수 있습니다.

IT 사용자를 위한

  • 다른 버전의.NET Framework는이 문제가 발생할 수 있습니다. 그러나 현재 4.6.1.NET Framework만 적용 가능한이 문제를 해결 합니다.
  • 매우 실행 패턴을 가진 매우 큰 작업에만 적용 하는 매우 드문 문제입니다. 모든 작업 부하의 99% 이상이이 문제를 어느 때 발생 합니다.
  • 응용 프로그램에 OutOfMemory 예외를 throw 한 후 복구 하는 유일한 권장 되는 방법은 응용 프로그램을 다시 시작 하는 것.

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 3152158 - 마지막 검토: 05/10/2016 16:52:00 - 수정: 2.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbtshoot kbexpertiseinter kbmt KB3152158 KbMtko
피드백