기초 Linux 서버관리2013. 12. 13. 11:49

서버 엔지니어가 가장 많이 사용하는 명령어 중 하나 free, free -m이라는 명령어이다.

free라는 명령어는 총 메모리, 사용 중인 메모리, 남아 있는 메모리, 가상 메모리를 간단하게 볼 수 있도록 해주는 명령어인데

남아 있는 메모리에 대해서 오해를 하고 있는 부분이 있어서 글을 적어 봅니다.


그럼, 서버에 접속해서 현재 사용 중인 메모리와 남아 있는 메모리에 대해서 확인해 보도록 하겠습니다.


# free
             total       used       free     shared    buffers     cached
Mem:      16359780    9157224    7202556          0     201912    6396404
-/+ buffers/cache:    2558908   13800872
Swap:      3911816        160    3911656


각 항목에 대해서 간단히 설명해 본다.

[Mem] total : Total Physical Memory size
[Mem] used : Total Physical Memory size - Free memory size
[Mem] free : 현재 사용되고 있지 않은 여유 Memory
[Mem] shared : 항상 0이고, 현재 사용되고 있지 않음.
[Mem] buffers : File등의 Meta data를 Cache하고 있는 Physical Memory size
[Mem] cached : File의 Real Data를 Cache하고 있는 Physical Memory size
[-/+ buffers/cache] used- : buffers, cached를 포함하고 있지 않은 used size
[-/+ buffers/cache] free+ : buffers, cached를 포함한 free size
[Swap] total : Total Swap size
[Swap] used : Total Swap size - Free size
[Swap] free : 사용하고 있지 않은 Swap size

free를 입력하면 출력 되는 단위는 kilobyte이다.
우리는 Megabyte에 익숙해져 있으니 free -m 으로 보면 쉽게 얼마나 메모리를 사용하는지 알 수 있다.

다시 본론으로 돌아와서 free 출력 값을 보면 [Mem] free 항목을 보고 현재 남아있는 메모리는 7202328(7033MB)라고
알고 있는 사람들이 있다. 이것은 오해이다.

정확히 말하면 [Mem] free항목은 "남아있는 Memory Size"가 아닌, 어떠한 용도로도 사용되고 있지 않은
Physical Memory Size라고 생각하면 된다.

결론적으로 System 전체의 Memory 사용량의 감시는 [Mem] Free을 판단 기준으로 하는 것이 아니라,
사용가능한 Physical Memory Size로 계산 할 필요가 있다.

계산하는 항목은 아래와 같다.


Memory size ≒MemFree + Inactive


MemFree 와 Inactive 는 /proc/meminfo에 있는 항목이니 cat으로 출력해 보자.


# cat /proc/meminfo
MemTotal:     16359780 kB
MemFree:       7202556 kB
Buffers:        201912 kB
Cached:        6396404 kB
SwapCached:          0 kB
Active:        2578320 kB
Inactive:      6149700 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:     16359780 kB
LowFree:       7202556 kB
SwapTotal:     3911816 kB
SwapFree:      3911656 kB
Dirty:             108 kB
Writeback:           0 kB
AnonPages:     2129660 kB
Mapped:          57756 kB
Slab:           383820 kB
PageTables:      15708 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:  12091704 kB
Committed_AS:  3042920 kB
VmallocTotal: 34359738367 kB
VmallocUsed:    265072 kB
VmallocChunk: 34359472959 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB


 free로 출력했을 때보다 더 많은 항목들이 출력 되었다.free는 /proc/meminfo에 있는 항목들을 참조하여

보기 쉽게 출력해 주는 명령어이니 좀 더 자세한 메모리 확인을 위해서는 /proc/meminfo 보도록 하자.
(meminfo 항목에 대해서 얘기하면 길어지니 생략하겠다)



               Inactive:       6149700 kB
+           MemFree:       7202556 kB
--------------------------------------
사용 가능한 메모리 :      13800872 kB (약 13.8G)

필자가 초반에 현재 남아있는 메모리는 7202328(7033MB)라고 기재했던 메모리와 5G 정도 차이가 난다는 것을 알 수 있다.
이런 계산법이 어렵거나 빨리 확인을 해야 하는 경우라면 free 입력 후 -/+ buffers/cache:    2558908 13800872 을 보아라.
2558908 kB 가 현재 사용된 메모리이고
총 메모리(16359780 kB)에서 2558908 kB 뺀 값이 현재 사용할 수 있는 메모리이니 꼭 기억해 두었으면 한다.

Posted by 박물지