윈도우 서버 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 사용자는 아래 파일을 따로 받으시기 바랍니다.


이상입니다.
신고

  1. BlogIcon 존재자
    2012.03.26 00:52 신고

    일하다가 올리셨나봐요? 즐겁게 한주 시작하세요~

  2. 동우
    2012.03.26 03:11 신고

    정말 유익한 정보 같아요.. 서버 사용은 안하지만.. 메모리 저 정도면.. 정말 난감 하겠네요..

  3. BlogIcon 제록스
    2012.03.26 14:28 신고

    급하게 메모리가 올라가면 Cacheset 프로그램을 일단 이용해 봐야겠네요. 이런 프로그램이 있었군요~ 예전 컴퓨터에서 리부팅을 자주 했던 기억이 있는데... 유용한 정보 감사합니다.^^

  4. BlogIcon Minty99
    2012.03.26 17:18 신고

    스누피님 오랜만에 글 올리셨네요~^^

  5. 애독자
    2012.03.26 21:56 신고

    좋은 내용 감사합니다. (__)

  6. 나그네
    2012.03.27 17:25 신고

    매번 이렇게 글을남기게 하시는 좋은 정보를 알려주시네요.

  7. 스누피님
    2012.03.28 00:16 신고

    항상 좋은 내용 감사드리구요 오늘도 따뜻한 밤 되세요

  8. 용한
    2012.03.29 22:42 신고

    업무 노하우를 다 공개 해버리는건 아닌지요.
    그것도 같은 회사 후임이 아니라...

  9. 하승호
    2012.03.31 22:08 신고

    아.. 정말 대단하십니다.
    항상 좋은 정보 감사합니다.

  10. BlogIcon 일레시아
    2012.04.03 17:03 신고

    아직까지 이런일은 없었지만, 추후에 유용한 정보가 되겠군요...

  11. 2008 r2
    2012.04.10 09:55 신고

    스누피님 항상 블로그에서 정보를 많이 배우고있습니다. 감사합니다.
    한가지 질문이 있어서 리플 달아봅니다. 2008 r2 web 에디션에서 응용프로그램에 최대할당 메모리가
    얼마정도인가요? 윈도우2000에서 잘돌아가던 프로그램이 2008 R2에서는 로딩중 죽어버립니다.
    2GB조금넘게 점유한후에 자꾸 그지점에서만 죽네요 dep /pae /3GB , 가상메모리등을 다 설정해봐도
    마찬가지네요 답답해서 리플달아봅니다 글보시면 어디에서 무엇을 설정해야되는지좀 가르켜주세요 ㅎㅎ
    답답해서 글올려봅니다 수고하세요 ^^

    • BlogIcon 술이
      2012.05.30 23:08 신고
      수정 및 삭제

      서비스팩 안올렸나요?
      2008R2 서비스팩1 이전 OS들이 메모리 문제가 있었습니다. 서비스팩 올리고나서 이런 문제가 한큐에 사라지더군요. 커널메모리 누수가 발생하는 대부분의 이유가 벤더 드라이버 문제입니다. 서팩에도 문제를 해결한 드라이버가 존재하기 때문에 이런부분에 걸렸을수도 있습니다.

  12. BlogIcon 에라드
    2012.05.02 21:50 신고

    좋은 정보 정말 감사합니다^^! 많은 도움이 되었습니다!

  13. BlogIcon 타이거범
    2012.05.06 10:59 신고

    좋은 정보 감사합니다. 찾고 있던 자료인데 드뎌 여기서 찾게 되네요.. 감사합니다.

  14. 김영진
    2012.05.09 11:54 신고

    이것때문에 서버가 가끔씩 멈추는듯 해서 이걸 설치 하려고 합니다.
    그냥 설치해서 해당 서비스에 캐쉬메모리 사용제한을 걸어놓으면 되는건지요.

  15. BlogIcon 악마닷컴
    2012.06.11 14:46 신고

    오랜만에.. 구경왔는데 저한테 꼭필요한 내용이 감사합니다. ㅎ

  16. 화이트제비
    2013.10.29 11:30 신고

    좋은 자료 감사합니다.
    제 블로그에 퍼가도 되는지요?? 출처는 남기겠습니다..^^

  17. solttude
    2013.12.02 11:25 신고

    좋은 글 감사합니다. 퍼가겠습니다. ^^ 항상 건상하세요

  18. 질문
    2014.01.24 08:29 신고

    안녕하세요 동일한 문제가 발생하는 것 같아 적용 전에 질문 드립니다..
    Microsoft Windows Dynamic Cache Service
    들어가서, Dyncache 를 받으면 CPU 아키텍처별로 프로그램이 제공이 되던데,
    2008 R2는 맞는 CPU를 선택해도 안 된다는 말씀이셨나요?
    기존에 적용해 보신 것 같아서 문의드려요..

    +) 수정
    This service will only run on Windows Server 2008 or earlier versions of Windows.
    라고 readme 파일에 있네요..

    그렇다면, 따로 첨부해 주신 2008 R2용의 DynCache.exe
    프로그램을 가지고 ReadMe.docx 에 있는 동일한 스텝을 밟으면 되는지요?
    2008 R2는 CPU 아키텍처별로 구분이 없는지요?

  19. 블루존
    2014.04.02 11:42 신고

    서버용으로 사용하시면 이런유틸 유익하네요.이런기능을 비슷하게 활용하는 응용프로그램이 있어요.멤터보4, 라는 프로그램인데 주로 메모리관리기능이 있습니다.가상메모리사용율도 확인할수있고 이용가능메모리대비 소비메모리자원을 그래픽으로 표시해주죠.작업관리줄에 상주시켜놓고 멤사용율70%이상 넘나들면 램청소해서 회복시켜야해요.자동으로 30분-몇시간단위로 조정하는것도 내장되 있습니다.

  20. 다크코드
    2015.06.12 12:40 신고

    Window7 x64 서버에서 메모리가 끝까지 차고 맛탱이가 가는 문제가 계속 발생해서 몇 주간 DB튜닝과 코드 분석등등 씨름해보고 해결안되던 차에 이 블로그를 찾았습니다. 파일IO가 빈번한 서버라 이 문제가 맞는 것 같습니다. 좋은 정보 감사합니다.