free 명령.. 메모리 잔량/사용량 계산.
글쓴이: 사랑천사 / 작성시간: 목, 2006/08/17 - 3:30오후
free를 치거나... /proc/meminfo를 읽어 오면...
쭈욱 뜨는데... 여기서.. free를 쳤을 때 Cahced와 Buffers가 있습니다.
근대 이게 두 군데 있습니다. 출력이 보통 이런 식이죠. 전 -m 옵션을 주었습니다. (MegaByte단위로 출력)
root@lecl:~# free -m total used free shared buffers cached Mem: 500 257 242 0 0 177 -/+ buffers/cache: 79 420 Swap: 1185 76 1108 root@lecl:~#
이런데... 태이블 라벨이 있는 줄을 제외 하고 1번이 물리 메모리, 2번에 버퍼와 케쉬, 3번에 스왑 이렇게 나옵니다. 근대 물리 메모리 할당 부분에도 버퍼와 케쉬가 있고 2번 줄도 버퍼와 케쉬입니다. 메모리 잔량을 측정 할 때 free와 buffers, cached부분을 합쳐야 실제 메모리의 잔량이 나온다고 알고 있는데 어디 것을 더해야 하지요? 2번 줄의 내용을 더해야 하는 건가요? 아니면... 물리 메모리 줄(1번)를 더해야 하나요?
흐흠. 뭐 일일히 계산을 해 보고 측정 해 보면 알 수도 있는데... 이거. 프로세스별로 메모리 사용량 뽑는게 그렇군요. %단위로는 봅기가 쉬운데(실시간은 아니지만 ps aux로 전부 더해 보면 되겠죠.) 바이트/그 이상 단위로 뽑아 네는건 좀 그렇군요..
아무튼 어디랑 어디를 더해야 하죠??? 흠... 그리고 왜 -/+ 인가요? -부분.. 그러니가 버퍼는 빼고.. +부분.. cached는 더하란 소린지.. 저거 해석이 좀 어렵군요.
Forums:
아 참 그리고.
어떤 프로그램을 쓰고 있는데.. 이게 데몬처럼 띄우고 있거든요. autorun이란 C프로그램(아주 간단함)을 써서 프로그램이 죽으면 지가 알아서 뜨게 했구요. 근대 이 autorun안에서 실행 되어 주는 프로그램이... 상당히 웃끼는게.. 커널에서 Out of Memory로 죽여 버립니다. 리얼 콘솔이나 커널 로그에 남습니다 죽었다는게. 물론 autorun에 의해서 자동으로 다시 실행 됩니다만 흐흐흠.
이렇게 되어 있고요.. autorun은 아직까지 죽는걸 본 적이 없습니다.(저런 형식의 프로그램이 커널에 의해 죽는건 거의 못 봤습니다 지금까지. 어딘가엔 있겠죠.) 처음엔 안 그러는데 저거. 메모리 누수가 생기는 건지, 케쉬나 버퍼가 차는 바람에 메모리가 먹어서 그런 건지... 이게.. 파일 리스트를 읽고 그 파일 내용을 네트워크로 보내는 겁니다. 물론, 이게 미디어 파일이고 스트리밍용 프로그램이란 것도 잊겠죠 흠. 저는 localhost의 스트림 서버로 데이터를 전송 하게 해 두었고 대량 파일 리스트는 370여개가 넘습니다. 물론 이걸 하나 하나 무작위 축출해서 데이터 전송 하게 되어 잇고요. 으음. 저러는게 정상인가요???
그리고 저놈을 띄우기 전에는 httpd가 커널에 맞아 죽는 일은 없었는데 httpd고 가끔씩 커널에 맞아 죽어 버립니다. 아, 매인 프로세스가 죽는 경우는 거의 없어서 큰 문제는 안 생기지만 왠지 불안하잖아요 그래서 ㅋㅋ..
그럼...
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!
사람천사
두번째줄은 캐시와 버퍼를 남는 메모리로 생각해서 계산한 값입니다.
저도 예전에 어디서 본 내용이지만 리눅스에서는 윈도에 비해서 캐시로 메모리를 많이 먹고 있게 되지요. 주로 디스크 캐시인데 많이 먹고 있으면 캐시 힛이 일어날 확률이 자연히 높아지게 되고, 캐시 메모리는 다른 응용프로그램에서 필요할 때 비교적 빨리 반환할 수 있다고 판단하여 이런 정책을 쓰는 것 같습니다. 이런 상황 싫어하는 사람도 있긴 하던데요... 하여튼... 그래서 리눅스에서 free에서 남는 메모리를 보면 너무 적게 남는 것으로 나온다는 겁니다. 따라서 사실상 빨리 돌려받을 수 있는 캐시 메모리는 free 메모리라고 쳐서 -_- 표시한 것이 두번째 라인의 결과입니다.
즉 메모리 500중에서 257만큼 사용하고 242만큼 남았는데 캐시가 177이니까 캐시 돌려받는다고 가정하면...
쓴 양은 257-177 = 79(메가 단위로 보여주므로 1정도의 오차는 무시합시다)가 되고, 남는 양은 242+177=420(이것 역시 1정도는 무시합시다. 바이트 단위로 표시하게하면 정확히 떨어집니다.)이 되는겁니다.
그래서 두번째 것에는 -/+ buffers/cache 라는 항목은 위의 항목에서 사용량은 버퍼와 캐시만큼 빼 주고, 남는 량은 버퍼와 캐시만큼 더해준 값이라는 것입니다. 만약 윈도와 리눅스에서 메모리 사용량을 비교하려면 리눅스의 두번째 라인과 윈도 태스크 매니저에서 캐시 빼고 계산한 것과 비교해야 바른 비교가 된다는 거죠. 캐시 많이 하고 적게 하는건 운영체제의 습관과 정책일테니까요...
구글링 해 보니 아래 사이트에 관련 내용이 있네요.
http://gentoo-wiki.com/FAQ_Linux_Memory_Management
블로그: http://turtleforward.blogspot.com
아.. 그리고
그러고 보니 제가 글을 제대로 안 읽고 답글을 단 것 같네요.
결국 두번째줄은 이미 계산이 끝난 결과가 나온 겁니다. 첫번째 줄을 더하셔도 되고 두번째 줄을 그냥 얻어가셔도 됩니다. 그냥 두번째줄 얻어가세요... 계산은 컴퓨터가 하는 거잖아요...
그리고 -/+는 버퍼를 빼고 캐시를 더하라는 게 아니라 버퍼와 캐시를 사용량에서는 빼고 남은량에는 더하라는 뜻입니다.
블로그: http://turtleforward.blogspot.com
그럼 설마 저거...
자동 계산된 값을... (2번 줄) MRTG에서 바로 이용 가능할지... 물론 SNMP에서 불러 올 수 있다면 되긴 하겠죠. 근대 KLTP에서 팁을 봤는데. 거기선 그걸 일일히 계산 하게 만들어 놨더군요... 뭐 잘 이해도 못 했지만 말입니다. 사실 SNMP나 MRTG를 다루는 것 자체가 흐흠. SNMP의 사용, 관리에 대한 계념도 잘 모르겠습니다. 트래픽 데이터 가져 오는 거는 봤는데 흐흠. 아무튼 어렵군요. 처음에 MySQL의 인증 시스템을 보고 '허걱' 했던 거 하고 비슷하군요 아무튼... SNMPD+MRTG로 그래프 그릴 수 있겠죠 아마도? 흐흠... 바로 뽑아서 말이죠. 계산된 값을요.. 그게 흐흠 아무튼...
그럼...
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!
사람천사
댓글 달기