메모리 릭은 응용프로그램을 죽인다

어제 저녁부터 헬게이트: 런던의 오픈베타를 해보고 있다. 디아블로의 향수로 하고 있긴한데 아직은 만족스럽다고하기엔 2% 부족했다. 뭐 이게 중요한 것은 아니고 내 개인 컴퓨터(집에서 쓰는)에서 헬게이트 런던을 구동시키면 다음과 같은 일들이 발생한다.

  1. 게임 시작 (7xx메가의 메모리 사용)
  2. 메모리 사용량이 지속적으로 증가(10분 후면 프로그램 자체가 약 2기가 정도를 차지한다)
  3. 스왑 공간역시 지속적으로 증가(시작시에 부팅 후 기본설정이 4GiB에서 시작해서 약 10GiB까지 상승)
  4. 물리 메모리 공간이 고갈되기 시작한다(물리 메모리 사용량 3.8GiB+로 증가)
  5. 하드 디스크 페이징(=thrashing)이 계속해서 발생

…대충 이런 과정이 약 2시간 정도 주기로 발생하는데 원인을 파악하기가 힘들다 -_-;;

일단 플레이 환경이 x86-64/Windows Vista/라데온 3870/라데온 드라이버 1. 17일 업데이트인데, 의심이 가는 것은

  • 프로그램 자체의 메모리 릭 (특히 지역 이동 시) – 이건 비슷한 환경인 Dish 의 경우엔 일어나지 않는다함
  • 그래픽 드라이버 버그 – 가장 의심가는 곳. rein의 AMD에 대한 신뢰란건 거의[…] 그렇지만 뜯어보거나 디버거를 붙여본건 아니니 -_-;
  • DX 디바이스를 재생성(restore) 할 때 릭이 있는 경우 – IRC 클라이언트를 쓴다고 자주 프로그램 포커스를 바꾸기 때문에 그 때마다 릭이 생기는건 아닐까 하는 중

여튼 메모리 릭은 하드디스크 페이징을 발생시키고, 이건 응용 프로그램엔 치명타라는 고전적인 문제를 집에서 경험하고나니 참 -_-;;

프로그램 – 경우에는 해당하지않지만 고전적인 서버/클라이언트 응용에서 서버 쪽 – 은 아주 단순화 시켜서보면,

  • 일정 형태(아주 일반적으로 보면 푸아송 분포)로 입력이 들어오고
  • 특정 형태(아주 일반적으로 보면 역시 푸아송 분포)로 작업을 처리하게 된다

즉 고전적인 큐잉 시스템이 되는데, 하드디스크 페이징(thrashing)이 메모리 릭 같은 이유로 유발되면,

  • 입력으로 계속해서 클라이언트 요청이 들어오는 것은 변하지 않는다
  • 작업처리율은 디스크 페이징으로 인해서 매우 낮아진다

와 같은 상태가되고, 큐 자체가 급격히 길어지면서 붕괴한다.

뭐 진짜 안되면 32bit 호환모드를 찾아오거나 DX9 드라이버 모드로 돌린다거나 해야 -_-

Jinuk Kim
Jinuk Kim

SW Engineer / gamer / bookworm / atheist / feminist

Articles: 935

One comment

Leave a Reply