Hyper-V 사용도중 호스트 메모리 부족으로 인한 프리징(버벅임) 문제 해결 방법



필자의 집에는 24시간 끄지 않고 사용하는 컴퓨터가 있습니다.

바로 NAS로 사용하고 있는 컴퓨터 인데요,

NAS는 Hyper-V로 가상화 해서 꾸며놓고, 호스트는 평소에는 놀고 있다가 가끔 호스트에서 직접 작업을 하기도 합니다.


문제는 이 컴퓨터가 처음 부팅 후 한동안은 이상이 없는데,

어느순간인가 부터는 호스트가 사용을 전혀 못할 정도로 버벅이게 됩니다.

하지만 웃긴건 이렇게 호스트가 마우스 커서 하나 움직이는 것도 힘들정도로 버벅일 때에도,

Hyper-V의 가상화로 돌아가고 있는 NAS는 전혀 이상없이 돌아가고 있습니다.

가상머신을 끄고 있으면 아무리 오랜 시간이 지나도 이상이 없는 걸로 보아서는

Hyper-V의 문제라는 것을 100% 직감 했습니다.


이문제로 해외포럼을 돌아 다니다가 Hyper-V의 동적메모리 관리와 관련해서 생기는 문제라는 것을 알게 되었고 드디어 호스트 버벅임을 해결할 수 있었습니다.


원인은 이렇습니다.

Hyper-V에서 동적 메모리를 사용할 경우, 적은 메모리로 부터 사용해서 점차 필요한 만큼의 메모리를 확보해서 사용하는 것 까지는 좋습니다만,

문제는 프로그램에서 메모리 사용이 끝나고 반환된 메모리가 생겨도 이 영역을 Hyper-V에서 호스트로 돌려주지 않는다는 것입니다.

Hyper-V에서 쥐고 있는 메모리가 점점 늘기는 해도 줄지는 않다 보니,

결국 호스트가 사용해야 할 메모리 까지 다 잡아먹어 버려서,

호스트는 버벅이고 있을 때에도 Hyper-V에서 돌아가는 게스트는 정상적으로 동작을 하는 것이지요.

특히나 동적메모리의 경우 할당된 메모리만 잡아 먹는게 아니라,

추가적으로 버퍼 설정값에 해당하는 만큼도 잡아 먹으니 더 많은 용량을 잡아 먹는 것이고요.


그래서 레지스트리에 Hyper-V가 침범하지 못할 호스트가 사용할 영역을 입력해서,

Hyper-V가 호스트의 모든 메모리를 잡아먹는 것을 방지해 줍니다.


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization


레지스트리 편집기로 위의 키로 찾아 가셔서,

DWORD값으로 새로 만들기를 하신 후, 이름은 MemoryReserve로 입력해 줍니다.

그런 다음에 호스트를 위해서 남겨 두어야 할 메모리 용량을 mb 단위로 입력 합니다.

입력이 끝났으면 재부팅을 해줘야 적용이 됩니다.



사실 필자가 생각하기에 서버를 돌릴 목적이라면 가장 안정적이고 속편한 방법은 그냥 동적메모리를 사용하지 않는것이 좋을것 같습니다.

동적메모리 관련 설정은 Hyper-V 관리자 창에서 게스트를 선택하면 오른쪽 작업 패널밑에 나타나는 메뉴 중에 "설정..."을 클릭 해서 뜨는 창에서 "메모리"를 클릭해 보면 동적 메모리 사용 체크박스가 있는데

이것을 해제만 해주면 됩니다.

이 메모리 설정은 반드시 Hyper-V의 게스트가 꺼진 상태에서 들어가야 수정할 수 있으니 참고 하세요.


Posted by 5CFM