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

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

모니터링할 카운터

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

  • Memory\Available Mbytes가 낮음

  • Memory\System Cache Resident Bytes

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

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

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

rammap view

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 플래그 없이 열린 다른 파일처럼 처리됩니다(캐시 관리자는 파일 데이터의 프리페치를 사용하지 않도록 설정하기 위해 이 플래그를 계속 적용). 이 플래그를 사용하여 많은 수의 파일을 열고 실제로 임의 방식으로 액세스한 경우에도 시스템 캐시가 부풀어 오를 수 있습니다. 애플리케이션에서 사용하지 FILE_FLAG_RANDOM_ACCESS 것이 좋습니다.

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

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

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

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

이 임계값은 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\RemoteFileDirtyPageThreshold를 사용하여 제어할 수 있습니다. 기본 크기 5GB가 구성에 적합하지 않은 경우 성능이 만족할 때까지 제한을 256MB 단위로 늘리는 것이 좋습니다. 다음 사항에 유의하세요.

  • 이 regkey의 변경 내용을 적용하려면 다시 부팅해야 합니다.

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

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

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