다음을 통해 공유


캐시 및 메모리 관리자 성능 문제 해결

Windows Server 2012 이전에는 두 가지 주요 잠재적 문제로 인해 특정 워크로드에서 사용 가능한 메모리가 거의 고갈될 때까지 시스템 파일 캐시가 증가했습니다. 이 상황으로 인해 시스템이 느려지는 경우 서버가 이러한 문제 중 하나에 직면하고 있는지 여부를 확인할 수 있습니다.

모니터링할 카운터

  • Memory\Long-Term Average Standby Cache Lifetime (s) < 1800 seconds

  • Memory\Available(Bytes, KBytes 또는 MBytes)

  • Memory\System Cache Resident Bytes

Memory\Available Mbytes가 낮고 동시에 Memory\System Cache Resident Bytes가 실제 메모리의 상당 부분을 소비하는 경우 RAMMAP를 사용하여 캐시가 사용되는 대상을 확인할 수 있습니다.

시스템 파일 캐시에 NTFS 메타파일 데이터 구조가 포함되어 있습니다.

이 문제는 다음 그림과 같이 RAMMAP 출력의 활성 메타파일 페이지 수가 많은 것으로 표시됩니다. 수백만 개의 파일에 액세스하는 사용 중인 서버에서 이 문제가 관찰되어 캐시에서 NTFS 메타파일 데이터가 캐시에서 해제되지 않을 수 있습니다.

rammap 보기

DynCache 도구에서 완화할 때 사용한 문제입니다. Windows Server 2012 이상에서는 아키텍처가 다시 디자인되었으며 이 문제가 더 이상 존재하지 않아야 합니다.

시스템 파일 캐시에 메모리 매핑된 파일이 포함되어 있습니다

이 문제는 RAMMAP 출력에서 많은 수의 활성 매핑된 파일 페이지로 표시됩니다. 이는 일반적으로 서버의 일부 애플리케이션이 FILE_FLAG_RANDOM_ACCESS 플래그 집합과 함께 CreateFile API를 사용하여 많은 대용량 파일을 열고 있음을 나타냅니다.

이 문제는 KB 문서 2549369 자세히 설명합니다. FILE_FLAG_RANDOM_ACCESS 플래그는 메모리 관리자가 메모리 부족 상태를 알리지 않을 때까지 가능한 한 오랫동안 매핑된 파일의 뷰를 메모리에 유지하는 캐시 관리자의 힌트입니다. 동시에 이 플래그는 캐시 관리자에게 파일 데이터의 프리페치를 사용하지 않도록 지시합니다.

이 상황은 Windows Server 2012 이상에서 집합 트리밍 개선 작업을 수행하여 어느 정도 완화되었지만, 주로 애플리케이션 공급업체에서 FILE_FLAG_RANDOM_ACCESS을(를) 사용하지 않음으로써 문제 자체를 해결해야 합니다. 앱 공급업체의 대체 솔루션은 파일에 액세스할 때 낮은 메모리 우선 순위를 사용하는 것입니다. SetThreadInformation API를 사용하여 이를 실현할 수 있습니다. 메모리 우선 순위가 낮은 페이지에 액세스하는 페이지는 작업 집합에서 더 적극적으로 제거됩니다.

캐시 관리자는 Windows Server 2016부터 트리밍 결정을 내릴 때 FILE_FLAG_RANDOM_ACCESS을(를) 무시하여 이를 더욱 완화하므로 FILE_FLAG_RANDOM_ACCESS 플래그 없이 열린 다른 파일처럼 처리됩니다(캐시 관리자는 파일 데이터의 프리페치를 사용하지 않도록 설정하기 위해 이 플래그를 계속 적용합니다). 이 플래그를 사용하여 많은 수의 파일을 열고 실제로 임의 방식으로 액세스한 경우에도 시스템 캐시 bloat을 발생시킬 수 있습니다. 애플리케이션에서 FILE_FLAG_RANDOM_ACCESS을(를) 사용하지 않는 것이 좋습니다.

원격 파일 더티 페이지 임계값이 지속적으로 초과됨

이 문제는 시스템이 원격 클라이언트에서 쓰는 동안 가끔 느려지는 경우에 표시됩니다. 이 문제는 빠른 원격 클라이언트에서 느린 서버 대상으로 대량의 데이터를 쓸 때 발생할 수 있습니다.

Windows Server 2016 이전에는 이러한 시나리오에서 캐시의 더티 페이지 임계값에 도달하면 추가 쓰기가 쓰기가 있는 것처럼 동작합니다. 이로 인해 디스크에 많은 양의 데이터가 플러시될 수 있으며, 이로 인해 스토리지가 느려질 경우 긴 지연이 발생하여 원격 연결에 대한 시간 제한이 발생할 수 있습니다.

Window Server 2016 및 앞으로는 시간 제한 가능성을 줄이기 위한 완화가 적용됩니다. 원격 쓰기에 대한 별도의 더티 페이지 임계값이 구현되고 인라인 플러시가 초과되면 수행됩니다. 이로 인해 쓰기 작업이 많은 동안 가끔 느려질 수 있지만 대부분의 경우 시간 제한의 위험이 제거됩니다. 이 원격 더티 페이지 임계값은 기본적으로 파일당 5GB입니다. 일부 구성 및 워크로드의 경우 다른 숫자가 더 잘 수행됩니다.

기본 크기 5GB가 구성에 적합하지 않은 경우 성능이 만족될 때까지 제한을 256MB 단위로 늘리는 것이 좋습니다. 다음에 주의하세요.

  • 이 레지스트리 키에 대한 변경 사항을 적용하려면 다시 부팅해야 합니다.

  • RemoteFileDirtyPageThreshold의 단위는 페이지 수입니다(캐시 관리자가 관리하는 페이지 크기 포함). 즉, 4096으로 나눈 원하는 크기(바이트)로 설정해야 합니다.

  • 권장 값은 128MB <= N <= 사용 가능한 메모리의 50%입니다.

  • 이 임계값은 -1로 설정하여 완전히 비활성화할 수 있습니다. 원격 연결에 대한 시간 제한이 발생할 수 있으므로 권장 되지 않습니다.

예를 들어 10,737,418,240바이트/4096 = 2,621,440인 10GiB로 제한을 설정하려는 경우 2621440 10진수 DWORD 값입니다.

이 임계값은 다음 레지스트리 값을 사용하여 제어할 수 있습니다.

  • : HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
    • 형식: DWORD
    • 값 이름: RemoteFileDirtyPageThreshold
    • 값 데이터: 10진수 - 페이지 수(캐시 관리자에서 관리하는 페이지 크기)입니다.