gbmin's Tech Notes

서버 구축 및 유지보수, 클라우드 컴퓨팅, 네트워크 보안, IT 분야 기술 노트. :)

Tech Notes/Tools & Command

[Linux command] vmstat 명령어를 통한 시스템 성능 모니터링

gbmin 2023. 7. 9. 08:53

vmstat 은 Virtual Memory Statistics의 줄임말로, Linux와 같은 Unix 계열 시스템에서 가상 메모리 통계를 보여주는 명령어다. Linux 서버 환경에서는 높은 트래픽 처리와 복잡한 연산 수행을 위해 리소스 사용 상태를 정확히 파악하고 효율적으로 관리하는 것이 중요한데, 이러한 관리를 위해 시스템 모니터링은 필수적이며, 서버 운영의 핵심 요소로 볼 수 있다. 부하 상태, 메모리 사용량, CPU 사용률 등 다양한 지표를 통해 서버 성능을 체크하고, 이를 통해 문제점을 신속하게 파악하고 해결하는 것이 가능하다. 이러한 성능 모니터링을 위한 툴은 다양한데, Linux 시스템의 기본 기능인 vmstat은 시스템의 전반적인 상태를 실시간으로 모니터링할 수 있게 해 준다. vmstat을 이용하면 CPU 사용률, 메모리 사용량, IO 작업 등 다양한 지표를 한눈에 파악할 수 있기 때문에 서버관리자라면 필수적으로 익혀야 하는 모니터링 도구이다.


[목차]

1. vmstat 기본 사용법

2. vmstat 주요 옵션과 예시

3. vmstat의 출력 내용 상세 보기

4. vmstat 활용 방법

5. vmstat 한계 보완 방법


1. vmstat 기본 사용법

간격은 숫자로, 명령어 실행 후 얼마나 지나서 다음 통계를 출력할지를 나타낸다. 횟수는 해당 간격으로 통계를 출력할 횟수를 지정한다. 예를 들어, 'vmstat 1 5'는 1초 간격으로 총 5번의 통계를 출력하라는 명령이다. 만약 간격과 횟수 없이 'vmstat'만 입력하면, 시스템 부팅 이후부터 현재까지의 평균 통계 값을 출력한다. 장시간 운영되는 서버의 평균 성능을 파악하고자 할 때 유용하다. 이외에도 vmstat은 다양한 옵션을 제공하여, 보다 상세한 정보를 얻을 수 있게 해 준다.

vmstat [간격(초)] [횟수]

 

 

 

2. vmstat 주요 옵션과 예시

vmstat 명령어만 실행하면, 시스템이 부팅된 이후부터 현재까지의 평균 통계를 보여준다.

# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 4081420  71788 1399972    0    0     0     0    4    5  0  0 100  0  0


특정 간격과 횟수로 통계 출력: 1초 간격으로 총 5번의 통계를 출력한다.

]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 4081264  71788 1399972    0    0     0     0    4    5  0  0 100  0  0
 0  0      0 4081264  71788 1399972    0    0     0     0   81  120  0  0 100  0  0
 0  0      0 4081148  71788 1399972    0    0     0     0  113  151  0  0 100  0  0
 0  0      0 4081148  71788 1399972    0    0     0     0   78  122  0  0 100  0  0
 0  0      0 4081148  71788 1399972    0    0     0     0   77  131  0  0 100  0  0


-a: Active/Inactive 메모리 정보 출력한다.

# 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
 1  0      0 4081396 897980 932068    0    0     0     0    4    5  0  0 100  0  0


-f: 부팅 이후 발생한 포크(fork) 수 확인한다.

# vmstat -f
        20487 forks


-s: vmstat으로 수집할 수 있는 모든 정보를 요약하여 출력한다.

# vmstat -s
      6108744 K total memory
       555472 K used memory
       932060 K active memory
       897980 K inactive memory
      4081512 K free memory
        71788 K buffer memory
      1399972 K swap cache
      4194300 K total swap
            0 K used swap
      4194300 K free swap
       102855 non-nice user cpu ticks
          128 nice user cpu ticks
        35443 system cpu ticks
    551426168 idle cpu ticks
         1297 IO-wait cpu ticks
            0 IRQ cpu ticks
          252 softirq cpu ticks
         5366 stolen cpu ticks
       430019 pages paged in
      2451624 pages paged out
            0 pages swapped in
            0 pages swapped out
     64951851 interrupts
    111094279 CPU context switches
   1687937980 boot time
        20488 forks

 

 

3. vmstat의 출력 내용 상세 보기

# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 4081808  71788 1399972    0    0     0     0    4    5  0  0 100  0  0
 0  0      0 4081808  71788 1399972    0    0     0     0   93  126  0  0 100  0  0
 0  0      0 4081808  71788 1399972    0    0     0     0   80  132  0  0 100  0  0

procs

r (running): 현재 실행 대기 중인 프로세스.
b (blocked): 현재 입출력을 기다리고 있는 프로세스.

 

Memory

swpd: 사용 중인 가상 메모리의 양
free: 사용 가능한 아이들 메모리의 양
buff: 버퍼로 사용 중인 메모리의 양
cache: 캐시로 사용 중인 메모리의 양

 

Swap

si (swap in): 디스크에서 메모리로 스왑인 된 데이터의 양
so (swap out): 메모리에서 디스크로 스왑아웃된 데이터의 양

 

IO

bi (blocks in): 디스크에서 시스템으로의 블록 입출력
bo (blocks out): 시스템에서 디스크로의 블록 입출력

 

System

in (interrupts): 초당 인터럽트 수
cs (context switches): 초당 컨텍스트 스위치 수

 

CPU

us (user time): 유저 공간에서 CPU 시간을 소비한 비율
sy (system time): 커널 공간에서 CPU 시간을 소비한 비율
id (idle time): 유휴 상태의 CPU 시간 비율
wa (wait time): 입출력 작업을 기다리는 동안 CPU가 유휴 상태인 시간 비율
st (stolen time): 가상환경에서 CPU 시간을 소비한 비율

 

 

4. vmstat 활용 방법

vmstat은 실시간으로 시스템 상태를 모니터링하고, 문제가 발생한 경우 원인을 파악하는데 매우 유용한 도구다. 예를 들어, 시스템이 느려졌을 때 vmstat을 사용하여 CPU, 메모리, IO 등의 상태를 확인하고, 각 칼럼의 값들을 통해 현재 시스템의 상태를 실시간으로 파악한다면, 이를 통해 시스템이 무거운 부하를 견딜 수 있게 만들거나, 가능한 문제점을 사전에 찾아낼 수 있다. 예를 들어, 만약 'r' 칼럼의 값이 CPU 코어 수보다 크다면, CPU에 과도한 부하가 발생하고 있는 것이며 이 경우, CPU 사용률이 높은 프로세스를 찾아내서 필요한 조치를 취할 수 있다. 'si'와 'so' 칼럼을 통해 스왑 사용량을 확인할 수 있다. 이 값이 지속적으로 높다면, 메모리가 부족하여 스왑이 지속적으로 발생하고 있음을 의미한다. 이런 경우에는 메모리 사용량이 높은 프로세스를 찾아내거나, 필요하다면 더 많은 메모리를 증설하는 등의 조치를 취할 수 있다.

 

 

5. vmstat 한계와 보완 방법

vmstat은 많은 유용한 정보를 제공하지만, 그렇다고 해서 모든 상황에 대한 정보를 제공하는 것은 아니다. 예를 들어, 네트워크 트래픽, 특정 프로세스의 상세한 리소스 사용량 등은 vmstat으로 확인할 수 없다. 이러한 정보는 다른 시스템 모니터링 툴을 병행하여 확인해야 한다. 예를 들어, netstat, ss 등의 도구를 통해 네트워크 연결 상태와 트래픽을 확인할 수 있다. 또한 top, htop, ps 등의 도구를 통해 특정 프로세스의 CPU, 메모리 사용량 등을 확인해야 한다.

그럼에도 불구하고 vmstat을 중요한 도구로 활용하는 이유는 Linux의 기본 시스템도구로 시스템 전반상황에 대한 내용을 빠르고 정확하게 파악할 수 있기 때문이다.

시스템 모니터링에는 vmstat 외에도 많은 도구들도 많이 사용된다. sar, atop, glances 등은 텍스트 기반의 인터페이스를 제공하는 프로그램이나, Grafana, Netdata 등은 웹 기반의 대시보드를 제공하여 시스템의 상태를 시각적으로 확인할 수 있게 하는 프로그램등이 있다. vmstat은 시스템 모니터링에 있어서 한 가지 도구일 뿐, 다른 도구들과 함께 사용하여 시스템의 전반적인 상태를 파악한다면, 시스템의 성능을 유지하고, 잠재적인 문제를 미리 찾아내는 데 큰 도움이 된다.