자료실

메모리 활용의 극대화 cleanmem

jeeyong 2008. 10. 11. 21:10
요즘 램값이 폭락하는 바람에 1기가 만원의 시대가 코앞입니다.
꽤 오래전에 2기가를 오만원 정도의 돈을 주고 산 것이 배가 아프기도 하지만 사실 요즘 램값을 보면 어이가 없을 지경입니다.
그래서 주변을 둘러보면 4기가, 8기가 유저를 심심찮게 볼수 있고 램 활용을 위해 64비트 OS와 램디스크에 대한 관심도 꾸준히 증가하는 추세입니다.

사실 평소에 사용하는 OS와 주 사용 용도를 보면 4기가 램도 개인에게는 그다지 필요없을지도 모릅니다.
게다가 현재 개인이 사용하는 어플리케이션들 중 몇 기가의 램이 필요한 사용처도 마땅히 떠오르지 않고 보이지도 않는 환경에서는 기껏해야 램디스크나 어플리케이션 지원이 미흡한 OS에 스트레스를 받기 일쑤입니다.
하지만 지금껏 컴퓨터를 사용해왔던 유저 치고 램에 대한 갈증에서 자유로운 사람이 얼마나 될까요?
그런 심리적인 니즈가 무조건 많을수록 좋다는 구매 심리를 불러 일으키는 걸겁니다.
사실 지금껏 램은 많을수록 좋다는건 만고불변의 진리였고요..... :)

그런데 사실 어느 정도의 충족선을 넘어서면 고용량 램 = 쾌적한 환경 의 등식이 깨어집니다.
쉽 게 말해 100메가 램에 50메가가 OS와 어플리케이션으로 사용되는 환경과 200메가 램에 100메가가 OS와 어플리케이션으로 사용되는 환경은 분명히 후자가 100메가의 여유량을 가지고 있지만 OS와 어플리케이션의 램 용량에 따른 풀 로드의 상태를 넘어서면 도리어 이미 사용된 100메가의 램의 부하로 인해 버벅일 확률이 높아진다는 것입니다.
- 이 얘기는 오해의 소지가 상당히 많을수 있는데 운영체제론을 공부한 사람이라면 공감할수 있을것입니다.
어차피 가상메모리 기술과 가변적 모듈-메모리 적재 기술이 관건이기는 하지만 현재의 윈도우 체제에서는 아직도 통용되는 얘기입니다. 
10 기가 램을 쓰는 사람과 20기가 램을 쓰는 사람의 환경을 생각해보면 이해가 빠를 것입니다.  어느정도의 선을 넘어서서 램에 적재될수 있는 OS와 어플리케이션의 풀로드가 실현되면 그 이후부터는 높은 확률의 히트율과 메모리 반환, 어드레싱이 관건이 되고 이런 상황에서는 무작정 적재하는 것이 능사가 아니게 됩니다.

요는 필요한 부분에 필요한 정량을 어떻게 가져와서 쓸수 있느냐의 문제이고 이것은 Kb 단위 램의 시대부터 지금까지 OS론의 중요한 화두입니다.
최적화란 이름으로 지금껏 많은 기술도 발표되었었죠.
그리고 현재 사람들이 많이 쓰는 윈도우에서도 나름 메모리 최적화 기술이 많이 나와 있습니다.

그중 하나가 윈도우의 EmptyWorkingSet API를 이용하는 Cleanmem 이라는 유틸리티입니다.



약 한달 쯤 전에 알게된 cleanmem은 상당히 놀라운 유틸리티입니다.
구 글을 검색해보니 몇몇 블로그에서 이를 소개하고 이에 대한 논란도 있는것 같은데 제가 직접 사용해보고 기술문서를 읽어보고 프로세스와 반환에 대해 유의깊게 관찰해본 결과, 이야말로 Utility 라는 말에 걸맞는 툴이라고 결론내리게 되었습니다.

저작자 홈페이지 : http://www.pcwintech.com/node/145
리뷰 페이지 : http://www.majorgeeks.com/download5972.html
                   http://www.choboweb.com/468
                   http://drchoi.or.kr/878

우선 개괄적으로 얘기를 해보자면 cleanmem은 메모리 관리 유틸리티입니다.
지금껏 메모리를 늘려 준다는 - 불필요한 프로세스와 쓰레드를 죽이고 메모리를 반환하거나 강제적으로 반환시키고 이를 페이지 화일로 돌려버리는 - 그런 류의 프로그램은 참 많았습니다.
실 제로 보이기엔 메모리가 늘어난듯 보이지만 결국에는 재호출과 적재, 반환의 부하로 인하여 워크 타임만 늘어나는 불필요한 작업이 되기 일쑤였고 커널에 대한 완전한 이해와 API를 이용한 것이 아닌 자체적인 기술로 덤벼들었기에 히트율도 그다지 좋지 못했습니다.
가끔 크래쉬도 일어나곤 하고 하드를 엄청나게 읽어대는 일도 늘상 있었던 일입니다.

그런데 cleanmem은 이런 부작용이 전혀!!!  없습니다.
사 실 처음보는 사람들은 이건 사기다 라고 얘기할 정도이고 저작자도 이에 대한 오해를 풀기 위해 상당한 지면을 할애해 설명했지만 사실 이해하기 어려운 기술임인 분명합니다.   (윈도우 API의 근본적인 이해가 아닌 기능적인 부분에서의 이해가 이런 논란을 불러일으킨 원인이 아닐까 합니다.)
200메가의 램을 사용하던 어플리케이션이 20메가로 사용량이 확 줄어들고 반환하는 억세스 과정이 물리적으로 전혀 일어나지 않으며 사용시에 평소와 다름없이 작업을 하면서 사용가능한 램이 확 늘어나더라...
이러면 과연 누가 믿을까요?

cleanmem을 이해하는 두가지 기초적인 전제가 있습니다.
이 유틸리티는 자신이 직접 메모리 관리를 하는 것이 아닙니다.
윈도우의 EmptyWorkingSet API를 이용하는 유틸리티이며 자신은 윈도우의 "예약된 작업"에 등록이 됩니다.
즉 자신의 콘솔이 없으며 유틸을 관리하기 위한 콘솔창은 윈도우의 예약된 작업 스케쥴러를 통해야 합니다.
고로 일부 트윅 윈도우나 웹서핑을 빠르게 한다는 명목으로 task scheduler 프로세스를 죽여논 윈도우에서는 작동은 하지만 기본 설정값을 바꿀수 없습니다.

사용자 삽입 이미지
-예약된 작업에 등록되어 있는 job 프로세스,   sysinternal의 autorun으로 보았습니다.-


설치하면 초기 설정은 30분에 한번씩 작동하게 되어 있습니다.
저는 10분으로 설정을 해놓고 씁니다.
즉 10분마다 메모리 관리를 한다는 것이죠.

우선 작동 전과 작동 후의 메모리 소요량을 작업관리자로 보았습니다.

사용자 삽입 이미지
윈도우 자체 작업관리자로 본 메모리 사용량


메모리 사용량을 보면 놀라지 않을수가 없습니다.
줄어든 비율은 둘째치고 과연 저런 메모리 점유로 프로세스가 정상적으로 돌아갈까 하는 의문이 먼저 드는게 정상이겠죠.
Firefox의 경우는 90메가 정도, 웹마 같은 경우는 50메가 정도를 반환했군요...

그런데 가만히 보면 할당된 메모리양은 변화가 없습니다.
아니, 오히려 1메가가 늘었습니다.

이 부분 때문에 논란이 많은것 같은데...  (사실 늘어난 메모리양이 너무 커서 믿어지기가 힘들죠....)
이럴땐 전문 툴로 확실히 뒤벼보면 대충 감이 올겁니다...

sysinternal의 프로세스 익스플로러를 통해 메모리 변화를 살펴보았습니다.

사용자 삽입 이미지
메모리 관리 이전


사용자 삽입 이미지
메모리 관리 후


대충 감이 오십니까?
cleanmem 은 윈도우의 EmptyWorkingSet API를 통해서 프로세스가 현재 사용중인 프라이빗 영역은 놔두고 공유영역을 반환하는 것입니다.   실지 프로세스가 차지하는 메모리 영역인 워킹셋은 이 두 영역의 합으로 계산됩니다.  공유 영역은 현재 사용하지 않는 부분이기에 메모리로 반환되고 재호출시 다시 로드 됩니다.
이를 저작자는 비쥬얼베이직의 예를 들어 설명을 했습니다.   프로그램의 함수 선언 부분만 알면 금방 이해가 되는 부분입니다.
 
The API call only removes memory no longer being used by the process. It doesn't touch memory in use. Here is an example from a visual basic programming stand point.

Dim I as long
I = 20000

Done. Now 'I' has been set as a long number, it has now taken a spot in memory. It then loads the 20000 into memory. At the end of the call the memory is no longer used but still being taken up by the program because I didn't clean it up! A lot of programs do this, they take memory but don't always cleanup after themselves.

잘 모르겠다...이게 작동한다는 것이냐, 아니라는 것이냐.....라고 한다면 다시 저 스샷을 찍을 당시의 시스템 인포메이션을 돌이켜 보면 됩니다.


사용자 삽입 이미지
메모리 관리 이전


사용자 삽입 이미지
메모리 관리 후


빨간 박스 안의 피지컬 메모리의 available이 늘어났죠?
그러나 위에서 확 늘어난 메모리 양만큼은 안됩니다.
그 나머지 부분은 시스템 캐쉬로 잡혀 들어간겁니다.

이 부분은 파란색 박스의 페이지 화일 정보를 보면 더 확실히 알수 있습니다.
메모리 관리 전엔 page fault delta 값이 컸는데 관리 후에는 줄어들었습니다.
즉 캐쉬 히트 확률이 늘었다는 얘기는 확률이 일정하다고 가정할때 그만큼 캐쉬할 양이 줄어들었다는 얘기입니다.  적은 양에서 같은 확률을 적용하니 당연히 확률이 올라가죠....


많은 사람들이 cleanmem의 놀라운 성능을 보면서 너무 놀랍기 때문에 믿지 못하는 것 같습니다.
저작자도 이에 대한 설명을 하는데 상당히 노력을 할애하고 있는데 그로 인해 기술적인 부분을 더 많이 알게되어 오히려 감사하다고 해야 할듯 싶습니다.

저작자의 말을 다시 한번 인용합니다.

Quote: "(( CleanMem uses EmptyWorkingSet(), which is the same as the SetProcessWorkingSetSize false-trick.
Basically useless; all processes will have their working sets trimmed, which very likely means flushing stuff to your pagefile. Including the apps you are currently using, which will then have to re-read their stuff back from the pagefile. ))"

But the truth is,

http://msdn.microsoft.com/en-us/library/ms682606(VS.85).aspx
EmptyWorkingSet Function
Removes as many pages as possible from the working set of the specified process.

http://msdn.microsoft.com/en-us/library/ms686234(VS.85).aspx
SetProcessWorkingSetSize Function
Sets the minimum and maximum working set sizes for the specified process.

SetProcessWorkingSetSize does force memory to the page file because it limits how much memory the process can have.
EmptyWorkingSet is a cleanup api from Microsoft that doesn’t limit anything it simply removed the unused.

This is the same API call Microsoft uses in its memory cleanup program in its resource kit. So if you have any doubts then just try the program out and make your judgment from actually using the program and not by a stereo type set by crap programs and the people burned by them.

이미 윈도우 2003 리소스 킷과 닷넷 프로그램 메모리 관리에 적용된 기술이라고 열변을 토하는군요.... :)



대충 유틸리티의 검증을 해봤습니다.
사실 일반인으로서는 이런 류의 진위 여부는 사실 사용과는 별 관계가 없습니다.
이게 쓸만하느냐 아니냐의 문제가 남았을뿐이죠.

그럼 이게 쓸만하느냐?
자신있게 예 라고 대답할수 있겠습니다.
특히나 메모리 누수 현상이 심한 파이어폭스의 경우에는 엄청난 효과를 볼수 있다고들 하는군요.
사실 파이어폭스 외에도 실시간 감시류의 계속 프로세스를 붙잡고 있는 프로그램을 제외한 모든 프로그램들이 엄청난 효과를 보여줍니다.
시스템이 굉장히 가벼워진다고 할까요?
물론 프로그램을 사용하면서 메모리 반환, 프로세스 적재를 요청하면 다시 점점 커지긴 하지만 10분 정도의 텀을 두고 계속 클리닝을 하면 계속 쾌적한 상태를 유지할수 있습니다.
 지금껏 이 유틸리티를 이용하여 포토샵, 게임, Djing 소프트웨어인 트랙터 등등 무거운 프로그램을 사용했지만 한번도 작동하는 것을 느껴본 기억이 없습니다.

그리고 한번도 써본적은 없지만 문제가 생길것 같은 프로세스는 제외 목록 (cleanmem_ignore_list)를 만들면 그 프로세스는 제외하게 됩니다. 
또한 실제 유틸리티의 크기는 36k 입니다.
설치본이 1.7메가이지만 거의 대부분 txt로 이뤄져 있군요.... :)

아 무튼 자신있게 추천할만한 유틸리티이고 이 유틸리티를 사용하시면 아마 지금의 컴퓨팅 환경의 배는 쾌적해질것이라 예상됩니다.  그러나 현재 윈도우가 최적의 상태이고 램이 2기가 이상이라면 그다지 큰 기대를 하지 않는것도 좋을듯 하네요.... :)


다운로드 링크 :
인스톨 버전 : http://www.pcwintech.com/files/setups/cleanmem_v1.3.0_setup.exe
포터블 버전 : http://www.pcwintech.com/files/setups/cleanmem_v.1.3.0.zip

출처 : 뿜뿌 기타정보/맛집 게시판