윈도우 서버 2012 Hyper-V 위에 올라간 VM의 메모리 사용률이 비정상적으로 높은 경우


그런데 막상 작업 관리자, 리소스 모니터 등에는 특별히 메모리를 많이 사용하는 프로세스가 보이지 않을 때


RamMap 프로그램으로 확인을 해보니 Driver Locked 라는 녀석이 90% 이상을 차지하고 있다면


Dynamic Memory 때문에 그렇습니다.

윈도우 서버 2012의 Hyper-V는 Dynamic Memory를 지원하는데, Dynamic 메모리는 그 특성상 메모리가 부족할 때는 덩치를 키우지만, 메모리가 남아돌 때는 덩치를 줄이지 않습니다. VM이 메모리가 부족하여 한번 덩치를 키우기 시작하면 자신이 차지했던 물리 메모리 영역은 Hyper-V Host에 반환하지 않고 Driver Locked라는 영역으로 확보를 하고 있게 됩니다.

물론 VM 내부적으로 메모리가 필요하게 되면 Driver Locked 영역에서 반환을 해주겠지요. 하지만 외부 물리 메모리 영역에는 반환을 하지 않습니다.

이렇게 되면... 결국 이 VM은 항상 메모리 사용률이 95% 수준을 유지하게 됩니다. 서버 인프라를 운영하는 입장에서는 매우 달갑지 않은 현상입니다. 항상 메모리 사용률이 95% 근처로 관제되기 때문입니다.

따라서 Static Memory로 설정하면 이 문제는 해결됩니다. 개인적으로 운영 서버에 Dynamic Memory를 사용하는 것은 바람직하지 않다고 생각합니다. NUMA 문제도 있고... Dynamic Memory는 Demo나 Lab 환경에서나 사용하는게 좋겠습니다.

이상입니다.
신고
Share
  1. 테돌아이
    2012.12.07 11:05 신고

    한번 사용해보고 싶네요


  2. 2012.12.09 20:30

    비밀댓글입니다

  3. BlogIcon archmond
    2012.12.09 21:51 신고

    좋은 정보 고맙습니다!

  4. BlogIcon 컴포지트
    2012.12.11 08:48 신고

    동적 메모리라도 최소와 최대치를 조절할 수 있을텐데.. 그래도 저런 현상이 나옵니까?
    저같은경우 미니서버다 보니 처음에 동적으로 돌리다가 정적 메모리로 돌리고 있지만

  5. BlogIcon Slate 7
    2012.12.11 16:10 신고

    혹시 윈도우 서버 2012/윈도우 8 제품군에서 Hyper-V를 가상화를 지원하지 않는 CPU상에서 구동할 수 있게 하는 업데이트/패치등이 있나요? 여건만 되면 Hyper-V를 테스트해보고 싶은데, 가상화 지원이 안되는 구형 CPU 사용중이라서요...

  6. BlogIcon Wing4Bee
    2012.12.15 15:00 신고

    그렇군요. 참고해야겠네요. 늘리고 줄이고가 되야하는데, 늘리기만 하고 줄이지는 못하니... 상당히 아쉽네요.

  7. BlogIcon 술이
    2012.12.15 22:46 신고

    실제적으로 저렇게 락으로 호스트에서 사용을 할수 없게 한다고 해도 달갑지 않다고 할수도 없습니다. 이유는 대부분 가상화 운영에서는 호스트는 단지 가상화를 돌리기 위한 부모영역일분 그이상의 역할을 하지 않습니다. GUEST VM에서 메모리를 반환한다면 다른 VM이 필요할때 끌어다 쓰는건 좋은 현상일수 있습니다. 구지 호스트에 반환할 필요까지는 없다고 봅니다.


  8. 2012.12.18 21:04 신고

    마이크로소프트의 비공개 핫칙스 중에 KB2770440이라는 Hyper-V의 업데이트가 있던데 이걸 설치하면 해결될까요?


  9. 2012.12.21 11:51

    비밀댓글입니다

  10. BlogIcon manee-mx
    2012.12.23 20:45 신고

    구글에서 Hyper-V의 버그에 대한 글을 검색하다보니 여기까지 오게되었습니다. 이런 문제도 있었군요.

    저 또한 Hyper-V의 문제점을 하나 발견하였습니다. Windows 8의 Hyper-V 문제이지만, 알려지지 않은 좀 심각한 문제라 다른 분들의 문제 해결을 위해 정보 공유 차원에서 트랙백 걸고 가겠습니다.

  11. 다시한번
    2012.12.27 18:10 신고

    다시문의좀 드립니다..
    1개의 하드디스크에 파티션이 3개입니다
    C.D.E 로있습니다
    C드라이브 xp를 설치하였습니다
    D드라이브에 윈도우7을 설치하였습니다
    E드라이브에 윈도우8을 설치하였습니다

    여기서 C드라이브의 윈도우xp가 지저분하고 오래된거같아서 포맷하고 재설치를
    하였습니다 그래서 EasyBcd를 이용해서 윈도우7과 윈도우xp는 멀티부팅 메뉴를 만들어서
    부팅이 잘됩니다 그러나 윈도우8은 생성하여도 부팅이 안됩니다
    어떻게하면 되는지좀 강좌글 좀 하나 작성해주세요...
    여기저기 찾아봐도 윈도우8 부팅메뉴 복구방법이없네요