윈도우 서버 64비트 계열에서 메모리 사용률이 비정상적으로 높게 나타난다면, 시스템 파일 캐시를 의심해보시기 바랍니다. 이 시스템 파일 캐시는 작업 관리자나 리소스 모니터에서 확인할 수 없기 때문에 처음 겪어보시는 분들은 도무지 원인을 찾아내기 힘들 것입니다.

일단 이 내용과 관련해서 관심있는 분은 아래 글을 한번 읽어보세요.

Microsoft Windows Dynamic Cache Service
http://blogs.msdn.com/b/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic-cache-service.aspx

요지는 이렇습니다.

1. 윈도우 64비트는 커널의 가상 주소 공간이 매우 크기 때문에 (제가 알기로는 8TB)
2. 파일 갯수가 엄청 많으면서 지속적으로 엄청난 읽기 I/O를 일으킨다면 (주로 파일 서버)
3. 시스템 파일 캐시 크기가 지속적으로 증가해 결국 물리 메모리 전체를 점유해버림

이 문제를 해결하려면 시스템 파일 캐시의 작업 공간 크기를 제한해야 합니다.

일단 비정상적으로 메모리 사용률이 높은 서버에서 시스템 파일 캐시가 그 원인인지 확인해보고 싶다면 아래 RAMMap 툴을 사용해보시기 바랍니다.

RAMMap
http://technet.microsoft.com/en-us/sysinternals/ff700229


아래 그림과 같이 분홍색 Metafile의 Active 크기가 엄청 크다면 시스템 파일 캐시가 범인이 맞습니다. NTFS의 Metadata를 캐시하고 있는 것입니다.


우선 당장 메모리 사용률을 떨어뜨리고 싶다면 (리부팅 없이) 아래 CacheSet 툴을 사용해보시기 바랍니다.

CacheSet
http://technet.microsoft.com/en-us/sysinternals/bb897561



위 툴로도 시스템 파일 캐시의 작업 공간을 제한할 수 있는데, 제가 윈도우 서버 2008 R2에서 테스트 했을 때는 제한을 해도 최대치를 넘어 계속해서 캐시가 증가하였습니다. 따라서 저는 이 툴을 제한하는 용도로는 사용하지 않습니다. 단지 급하게 메모리 사용률을 떨어뜨리기 위해서만 사용합니다. Clear 버튼을 누르시면 캐시된 메모리 영역을 날려버립니다. 그런데 정확히 표현하자면 날리는 것은 아니고 다른 프로그램이 사용할 수 있는 상태로 되돌리는 것입니다.

Clearing the Cache's Working Set
You can force the Cache to release all of it's pages by pressing the Clear button. Note that the Cache can grow again as necessary, and that this is not the same as flush
ing the Cache - pages that were assigned to it are simply made available to other programs and can be reclaimed by the Cache.

Clear 버튼을 누르니 아래와 같이 효과가 바로 나타났습니다.


하지만 위 CacheSet은 어디까지나 응급조치용일 뿐이고, 근본적인(?) 조치는 아래 Windows Dynamic Cache Service를 활용하시기 바랍니다.

Microsoft Windows Dynamic Cache Service
http://www.microsoft.com/download/en/details.aspx?id=9258


그런데 위 툴은 윈도우 서버 2008 R2를 지원하지 않습니다. 따라서 윈도우 서버 2008 R2 사용자는 아래 파일을 따로 받으시기 바랍니다.


이상입니다.