2013. 12. 26. 14:57

[Linux/Ubuntu 시스템 관리] 메모리 체크 (free, top, vmstat, slabinfo, slabtop)

주의를 가지지 않다보면, linux system은 때때로 사용 가능한 자원을 초과할 때가 있다. 시스템 모니터 도구는 이러한 자원 할당량 체크를 하는데 도움을 준다. 이와 유사하게, device driver등과 같은 시스템 관리는 때때로 발생하는 문제와 시스템 오류를 제거하는데 도움을 준다.


(참고) 몇몇 도구(iostat)들은 설치가 필요하며, 종합적으로 sysstat, 즉, sudo apt-get install sysstat을 설치하면 필요한 package가 모두 설치될 수 있다.


free 명령으로 사용중인 메모리의 양을 체크할 수 있다.


각 메모리 사용량이 KB 단위로 출력된다.

~$ free

             total       used       free     shared    buffers     cached

Mem:        508000     501336       6664          0     105460     174144

-/+ buffers/cache:     221732     286268

Swap:       522236       1564     520672

~$


각 메모리 사용량이 MB 단위로 출력된다.

~$ free -m

             total       used       free     shared    buffers     cached

Mem:           496        486          9          0        102        167

-/+ buffers/cache:        216        279

Swap:          509          1        508

~$


각 메모리 사용량이 block 단위로 출력된다.

~$ free -b

             total       used       free     shared    buffers     cached

Mem:     520192000  509865984   10326016          0  107962368  175190016

-/+ buffers/cache:  226713600  293478400

Swap:    534769664    1601536  533168128

~$


합계를 출력한다. (Swap+Mem)

~$ free -mt

             total       used       free     shared    buffers     cached

Mem:           496        486          9          0        103        167

-/+ buffers/cache:        216        279

Swap:          509          1        508

Total:        1006        487        518

~$


각 메모리 사용량이 GB 단위로 출력된다.

~$ free -g

             total       used       free     shared    buffers     cached

Mem:             0          0          0          0          0          0

-/+ buffers/cache:          0          0

Swap:            0          0          0

~$


2초 단위로 출력한다.

~$ free -s 2

             total       used       free     shared    buffers     cached

Mem:        508000     498048       9952          0     105496     171088

-/+ buffers/cache:     221464     286536

Swap:       522236       1564     520672


             total       used       free     shared    buffers     cached

Mem:        508000     498056       9944          0     105496     171088

-/+ buffers/cache:     221472     286528

Swap:       522236       1564     520672


             total       used       free     shared    buffers     cached

Mem:        508000     498180       9820          0     105512     171072

-/+ buffers/cache:     221596     286404

Swap:       522236       1564     520672


...


RAM의 낭비와 속도 향상을 위해 Linux에서는 disk cache 공간을 사용한다. 첫줄, 즉, Mem:은 이러한 disk cache 공간을 모두 포함한 값을 사용한다. 그래서 실제로, 물리적인 RAM의 사용량을 체크하려면 두번째 줄인 -/+ buffers 부분을 참고해야 한다. 위 free -s 2의 마지막 부분에서, 221MB가 사용되고 286MB가 사용 가능한 크기이다.


top 명령(

[Research/Ubuntu] - [Linux/Ubuntu process 관리] ps, top을 이용하여 프로세스(process) 관리하기 참고)을 이용하여 화면 친화적 출력으로 확인이 가능하다.


~$ top


다음과 같은 화면이 지속적으로 갱신된다.

top - 14:16:21 up  5:20,  2 users,  load average: 0.00, 0.01, 0.05

Tasks: 132 total,   1 running, 130 sleeping,   0 stopped,   1 zombie

Cpu(s):  3.3%us,  0.0%sy,  0.0%ni, 96.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:    508000k total,   500188k used,     7812k free,   105872k buffers

Swap:   522236k total,     1564k used,   520672k free,   171372k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            

 4325 greenfis  20   0 91124  13m  10m S  3.7  2.8   0:00.34 gnome-terminal     

 1667 root      20   0  168m  30m 7592 S  2.3  6.1   0:21.89 Xorg               

 4317 root      20   0     0    0    0 S  0.3  0.0   0:00.06 kworker/0:1        

 4382 greenfis  20   0  2632 1140  860 R  0.3  0.2   0:00.09 top                

    1 root      20   0  2916 1752 1272 S  0.0  0.3   0:01.24 init               

    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           

    3 root      20   0     0    0    0 S  0.0  0.0   0:00.12 ksoftirqd/0        

    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        

    7 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset             

    8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper            

    9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 netns              

   10 root      20   0     0    0    0 S  0.0  0.0   0:00.04 sync_supers        

   11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 bdi-default        

   12 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kintegrityd        

   13 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kblockd            


Shift+M을 눌러 메모리 사용량으로 정렬된 결과를 볼 수 있다. 


vmstat을 호출하여 가상 메모리 통계를 확인할 수 있다.

~$ vmstat 5

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa

 0  0   1564   9092 105920 171408    0    0    20     4   86  116  0  0 99  0

 0  0   1564   9084 105928 171408    0    0     0    14  147  283  0  0 99  0

...

위 예는 5초마다 한번씩 메모리 정보를 출력해 준다. 


-S m은 (/1000k)MB단위, -S M은 (/1024k)MB 단위, -S k는 1000B 단위, -S K는 1024B 단위, -n 2 10은 매 2초마다 갱신, 총 10회까지 출력을 의미한다. 


아래와 같이 -s를 사용하여 메모리 체크를 위한 항목들을 확인할 수 있다.

~$ vmstat -s

       508000 K total memory

       499512 K used memory

       227172 K active memory

       224120 K inactive memory

         8488 K free memory

       106024 K buffer memory

       171400 K swap cache

       522236 K total swap

...


| less를 사용하여 화면 단위로 확인할 수 있으며, -M 사용으로 MB 단위로 출력된다.

~$ vmstat -S M -s | less


          496 M total memory

          488 M used memory

          222 M active memory

          218 M inactive memory

            7 M free memory

          103 M buffer memory

          167 M swap cache

          509 M total swap

            1 M used swap

          508 M free swap

         4084 non-nice user cpu ticks

          684 nice user cpu ticks

         2794 system cpu ticks

      1973994 idle cpu ticks

         3467 IO-wait cpu ticks

            0 IRQ cpu ticks

          127 softirq cpu ticks

            0 stolen cpu ticks

       379206 pages paged in

        72868 pages paged out

            8 pages swapped in

          399 pages swapped out

      1712065 interrupts

:


linux kernel에서는 kernel slab이라는 memory cache를 가지고 있는데, vmstat 명령으로 확인 가능하다.

(/proc/slabinfo로 확인 가능)

~$ sudo vmstat -m

Cache                       Num  Total   Size  Pages

hgfsInodeCache               10     10    384     10

ext4_groupinfo_4k           312    312    104     39

UDPLITEv6                     0      0    704     11

UDPv6                        11     11    704     11

tw_sock_TCPv6                 0      0    256     16

...

~$


top과 유사한 slabtop도 사용할 수 있다.

~$ sudo slaptop


다음과 같은 화면으로 정보가 표시된다.

 Active / Total Objects (% used)    : 183955 / 190417 (96.6%)

 Active / Total Slabs (% used)      : 5716 / 5716 (100.0%)

 Active / Total Caches (% used)     : 68 / 97 (70.1%)

 Active / Total Size (% used)       : 31364.80K / 32697.65K (95.9%)

 Minimum / Average / Maximum Object : 0.01K / 0.17K / 8.00K


  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   

 34091  33764  99%    0.05K    467       73      1868K buffer_head

 26351  25427  96%    0.59K   2027       13     16216K ext4_inode_cache

...