[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
...