본문으로 건너뛰기

vmstat 명령어를 이용한 시스템 모니터링은 어떻게 하나요?

💡 요약 정리

  • vmstat은 시스템 리소스 사용 현황을 모니터링할 수 있는 명령어입니다.
  • CentOS 5.x, 6.x 환경에서 동일하게 사용합니다.
  • delay와 count 값을 주어 주기적인 모니터링이 가능합니다.
  • 메모리, CPU, IO 등의 사용 상태를 구체적인 필드로 보여줍니다.
  • I/O 지연, 메모리 부족 등 원인 진단에 활용할 수 있습니다.

1. 설치 환경

  • CentOS 5.x x64bit (CentOS 6.x 환경도 동일합니다)

2. vmstat 명령어란?

  • 프로세스, 메모리, 페이징, I/O 블럭, CPU 활동 사항들의 정보를 출력하는 기능을 합니다.
  • vmstat에서 중요한 것은 procs 영역의 b 필드입니다. b 수치가 높은 경우 I/O 작업을 위해 CPU가 계속 대기 상태인 것으로 볼 수 있습니다. 이런 경우에는 디스크 I/O 문제를 확인할 필요가 있습니다.
  • 또한 swap-out (so)이 지속적으로 발생한다면 메모리가 부족하다는 의미입니다. 단, 일정 간격으로 스왑아웃이 발생하는 것은 정상이며 so 필드는 항상 0에 가까워야 합니다.

3. vmstat 명령어 입력 형식

  • vmstat -옵션 delay count

파라미터 설명

  • delay: 결과가 출력되는 주기를 의미합니다. 값을 지정하지 않으면 한 번만 실행하고 종료됩니다. 대부분 다른 툴에서는 delay 대신 interval로도 설명됩니다.
  • count: 데이터를 몇 번이나 출력할지를 의미합니다. 이 값을 지정하지 않고 백그라운드 작업으로 수행하면 사용자가 명시적으로 명령어를 종료하지 않는 한 계속 수행됩니다.

4. vmstat 명령어 활용하기

① 기본 출력 화면 예시

[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1517972 132592 243160    0    0     3     0   22   17  0  0 100  0  0
[root@localhost ~]#

② 3초 간격으로 5회 출력

[root@localhost ~]# vmstat 3 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1517840 132624 243164    0    0     3     0   22   17  0  0 100  0  0
 0  0      0 1517832 132624 243164    0    0     0     0   66   24  0  1 99  0  0
 0  0      0 1517832 132624 243164    0    0     0     0   49   34  0  0 100  0  0
 0  0      0 1507160 132640 244612    0    0   392     0 1952 1494  5  2 92  1  0
 0  1      0 1507060 132648 244604    0    0     0    37  259  724  0  1 98  0  0

procs 필드

  • r : CPU 접근 대기 중인 실행 가능한 프로세스 수
  • b : I/O 자원을 할당받지 못해 block 상태인 프로세스 수

memory 필드

  • swpd: 사용된 가상 메모리의 용량
  • free: 사용 가능한 여유 메모리의 용량
  • buffer: 버퍼에 사용된 메모리 총량
  • cache: 페이지 캐시에 사용된 메모리 용량

swap 필드

  • si: swap-in 된 메모리 양 (KB)
  • so: swap-out 된 메모리 양 (KB)
    • 스왑 아웃이 지속적으로 발생한다면 메모리 부족을 의심할 수 있습니다.

io 필드

  • bi: 블록 디바이스로부터 입력 블록 수
  • bo: 블록 디바이스로 쓰기 블록 수

system 필드

  • in: 초당 발생한 인터럽트 수
  • cs: 초당 발생한 컨텍스트 스위치(context switch) 수

cpu 필드

  • us: 사용자 수준 코드 실행 시간(단위 %)
  • sy: 시스템 수준 코드 실행 시간(단위 %)
  • id: CPU 유휴상태 시간 비율 (idle)
  • wa: IO 대기 시간 비율

③ active / inactive 메모리를 출력

[root@localhost ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 251620 1143188 555956    0    0    13    42   77   60  1  1 98  0  0
[root@localhost ~]#
  • inact: 사용되지 않는 메모리 용량
  • active: 현재 사용 중인 메모리 용량

④ 출력 단위를 지정하여 출력

  • 사용 가능한 단위: k, K, m, M (각각 1000, 1024, 1000000, 1048576으로 나눈 값)
[root@localhost ~]# vmstat -K
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 251248 118592 1477364    0    0    13    41   77   60  1  1 98  0  0

[root@localhost ~]# vmstat -M
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0    257    121   1512    0    0    13    41   77   60  1  1 98  0  0
[root@localhost ~]#

⑤ 디스크 사용량 확인

[root@localhost ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
...
sda    57631  21208 2853320  318062 267399 1422320 13197208 9287392      0    958
[root@localhost ~]#

Reads (읽기)

  • total: 성공한 모든 읽기 작업 개수
  • merged: 하나의 I/O로 병합된 읽기 작업 수
  • sectors: 성공적으로 읽은 섹터 수
  • ms: 읽기 작업 소요 시간 (ms)

Writes (쓰기)

  • total: 성공한 모든 쓰기 작업 개수
  • merged: 병합된 쓰기 작업 수
  • sectors: 성공적으로 쓴 섹터 수
  • ms: 쓰기 작업 소요 시간 (ms)

IO (입출력)

  • cur: 현재 수행 중인 I/O 수
  • sec: I/O를 수행하는데 걸린 시간 (초)

⑥ 지정한 파티션 통계 출력

[root@localhost ~]# vmstat -p sda1
sda1          reads   read sectors  writes    requested writes
                 546       7764        262      41752
[root@localhost ~]#
  • reads: 파티션에 입력된 수
  • read sectors: 파티션에 입력된 섹터 수
  • writes: 파티션에 출력된 수
  • requested writes: 파티션에 요청된 출력 수

참고 자료