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: 파티션에 요청된 출력 수