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

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

모니터링할 카운터

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

  • Memory\Available Mbytes is low

  • Memory\System Cache 상주 바이트

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입니다. 일부 구성 및 워크로드의 경우 다른 숫자가 더 잘 수행됩니다.

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

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

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

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

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