vmstat
입니다. 이 리뷰에서는 vmstat
의 구석구석을 파헤쳐, 단순한 명령어 이상의 가치를 발견하고 여러분의 시스템 분석 능력을 한 단계 끌어올리는 데 도움을 드리고자 합니다.
vmstat이란 무엇인가 시스템 성능 모니터링의 기본
vmstat
(Virtual Memory Statistics)은 리눅스, 유닉스 계열 운영체제에서 시스템의 가상 메모리, 프로세스, CPU 활동, 디스크 I/O 등을 실시간으로 모니터링하고 보고하는 명령어입니다. 단순히 현재 상태를 보여주는 것뿐만 아니라, 특정 시간 간격으로 데이터를 수집하여 시스템의 성능 변화 추이를 파악하는 데 유용합니다. vmstat
은 별도의 설치 없이 대부분의 시스템에 기본적으로 포함되어 있어 접근성이 뛰어나며, 간단한 명령어로 다양한 정보를 얻을 수 있다는 장점이 있습니다.
vmstat의 주요 필드 완벽 분석
vmstat
의 출력 결과는 여러 개의 필드로 구성되어 있으며, 각 필드는 시스템의 특정 측면을 나타냅니다. 각 필드의 의미를 정확히 이해하는 것이 vmstat
을 효과적으로 활용하는 첫걸음입니다. 다음은 vmstat
의 주요 필드와 그 의미에 대한 상세한 설명입니다.
-
- procs
- r (Runnable): 실행 대기 중인 프로세스 수. 이 값이 높으면 CPU 병목 현상을 의심해볼 수 있습니다.
- b (Blocked): I/O 작업 등으로 인해 잠들어 있는 프로세스 수. 디스크 I/O 병목 현상을 나타낼 수 있습니다.
- memory
- swpd: 사용 중인 가상 메모리(swap)의 양 (KB).
- free: 사용 가능한 물리 메모리(RAM)의 양 (KB).
- buff: 버퍼로 사용되는 메모리 양 (KB). 파일 시스템 메타데이터 캐시에 사용됩니다.
- cache: 캐시로 사용되는 메모리 양 (KB). 파일 데이터 캐시에 사용됩니다.
- inact: 비활성 메모리 양 (KB).
- active: 활성 메모리 양 (KB).
- swap
- si: 디스크에서 메모리로 스왑된 양 (KB/s).
- so: 메모리에서 디스크로 스왑된 양 (KB/s).
si
와so
값이 지속적으로 높으면 메모리 부족을 의미합니다.
- io
- bi: 디스크로부터 받은 블록 수 (blocks/s).
- bo: 디스크로 보낸 블록 수 (blocks/s). 디스크 I/O 활동량을 나타냅니다.
- system
- in: 초당 인터럽트 수.
- cs: 초당 컨텍스트 스위칭 횟수. 이 값이 높으면 CPU가 프로세스 전환에 많은 시간을 소비하고 있다는 의미입니다.
- cpu
- us: 사용자 프로세스가 CPU를 사용한 시간 비율 (%).
- sy: 시스템(커널) 프로세스가 CPU를 사용한 시간 비율 (%).
- id: CPU 유휴 시간 비율 (%).
- wa: I/O 대기 시간 비율 (%). 디스크 I/O 병목 현상을 나타낼 수 있습니다.
- st: 가상 머신에서 다른 가상 머신에게 CPU를 빼앗긴 시간 비율 (%). (Steal Time)
vmstat 활용 팁 다양한 옵션과 활용 예시
vmstat
은 다양한 옵션을 통해 원하는 정보를 더욱 세밀하게 얻을 수 있습니다. 몇 가지 유용한 옵션과 활용 예시를 소개합니다.
-
vmstat delay count
:delay
초 간격으로count
번 반복하여 데이터를 출력합니다. 예를 들어,vmstat 5 10
은 5초 간격으로 10번 데이터를 출력합니다.
-
vmstat -a
: 활성/비활성 메모리 정보를 더 자세하게 보여줍니다.vmstat -d
: 디스크 I/O 통계를 보여줍니다. 디스크별 읽기/쓰기 횟수, 전송량 등을 확인할 수 있습니다.vmstat -s
: 메모리 사용량 요약 정보를 보여줍니다. 총 메모리, 사용 중인 메모리, 캐시, 스왑 공간 등을 확인할 수 있습니다.vmstat -n
: 헤더를 한 번만 출력합니다. 스크립트에서 데이터를 파싱할 때 유용합니다.vmstat -t
: 각 행에 타임스탬프를 추가합니다.vmstat -S unit
: 단위를 지정합니다 (k, K, m, M). 예를 들어,vmstat -Sm
은 메모리 정보를 MB 단위로 보여줍니다.
활용 예시 1 CPU 사용률 분석
vmstat 1
명령어를 실행하고, us
(user), sy
(system) 필드를 주시합니다. us
값이 높다면 사용자 프로세스가 CPU를 많이 사용하고 있다는 의미이며, 특정 프로세스를 찾아 최적화해야 할 수 있습니다. sy
값이 높다면 커널 작업이 CPU를 많이 사용하고 있다는 의미이며, 시스템 호출 최적화 또는 커널 업데이트를 고려해볼 수 있습니다. wa
(I/O wait) 값이 높다면 디스크 I/O 병목 현상을 의심해봐야 합니다.
활용 예시 2 메모리 부족 진단
vmstat 1
명령어를 실행하고, si
(swap in), so
(swap out) 필드를 주시합니다. si
와 so
값이 지속적으로 높다면 메모리 부족을 의미합니다. 이 경우, 메모리 증설 또는 메모리 누수 프로세스 확인이 필요합니다. free
필드 값이 낮고 cache
필드 값이 높다면, 캐시 메모리가 부족한 것일 수 있습니다. 이 경우, drop_caches
명령어를 사용하여 캐시를 비워주고 성능 변화를 관찰해볼 수 있습니다.
활용 예시 3 디스크 I/O 병목 현상 분석
vmstat -d
명령어를 실행하여 디스크별 I/O 통계를 확인합니다. 특정 디스크의 reads/s
, writes/s
값이 높다면 해당 디스크에 I/O 부하가 집중되고 있다는 의미입니다. await
(평균 I/O 요청 대기 시간) 값이 높다면 디스크 응답 시간이 느리다는 의미이며, 디스크 성능 개선 또는 데이터 분산 전략을 고려해야 합니다.
vmstat의 장점과 단점
vmstat
은 강력한 시스템 성능 분석 도구이지만, 완벽하지는 않습니다. 장점과 단점을 명확히 이해하고 사용하는 것이 중요합니다.
장점
-
- 뛰어난 접근성: 대부분의 리눅스/유닉스 계열 시스템에 기본적으로 설치되어 있어 별도의 설치 과정 없이 즉시 사용할 수 있습니다.
-
- 간편한 사용법: 간단한 명령어로 다양한 시스템 정보를 얻을 수 있어 초보자도 쉽게 사용할 수 있습니다.
- 실시간 모니터링: 시스템의 현재 상태를 실시간으로 모니터링하고, 시간 간격으로 데이터를 수집하여 성능 변화 추이를 파악할 수 있습니다.
- 낮은 시스템 부하: 시스템 자원을 거의 사용하지 않아 운영 환경에 미치는 영향이 적습니다.
단점
-
- 세부 정보 부족: 특정 프로세스 또는 스레드의 성능 정보를 제공하지 않아, 문제의 근본 원인을 파악하기 어려울 수 있습니다.
-
- 전체적인 관점 부족: 시스템 전체의 성능을 보여주지만, 애플리케이션 레벨의 성능 정보는 제공하지 않습니다.
- 데이터 해석의 어려움: 출력 결과가 숫자로만 표시되어, 데이터 해석에 대한 이해도가 필요합니다.
- GUI 환경 미지원: 명령행 인터페이스(CLI) 환경에서만 사용할 수 있어, GUI 환경에 익숙한 사용자에게는 불편할 수 있습니다.
실제 사용 경험 vmstat을 활용한 성능 개선 사례
실제로 vmstat
을 사용하여 시스템 성능을 개선한 경험을 공유하고자 합니다. 최근 운영 중인 웹 서버의 응답 속도가 느려지는 문제가 발생했습니다. vmstat 1
명령어를 실행하여 CPU 사용률을 확인한 결과, wa
(I/O wait) 값이 지속적으로 높게 나타났습니다. 이는 디스크 I/O 병목 현상이 발생하고 있다는 것을 의미했습니다. vmstat -d
명령어를 통해 디스크별 I/O 통계를 확인한 결과, 특정 디스크에 I/O 부하가 집중되고 있었습니다. 해당 디스크에 저장된 데이터베이스 로그 파일을 다른 디스크로 옮기고, 데이터베이스 쿼리를 최적화한 결과, wa
값이 현저히 낮아지고 웹 서버 응답 속도가 개선되었습니다. 이처럼 vmstat
은 문제의 원인을 빠르게 파악하고 해결하는 데 큰 도움을 줄 수 있습니다.
유사 도구와의 비교 vmstat, top, iostat
vmstat
외에도 시스템 성능 모니터링에 사용되는 다양한 도구가 있습니다. 대표적인 도구인 top
, iostat
과 비교하여 vmstat
의 장단점을 더욱 명확하게 이해해 보겠습니다.
-
top
: 현재 실행 중인 프로세스 목록과 CPU, 메모리 사용량 등을 보여줍니다.vmstat
보다 더 자세한 프로세스 정보를 제공하지만, 시스템 전체적인 성능 추이를 파악하기에는vmstat
이 더 유용합니다.
-
iostat
: 디스크 I/O 통계를 보여줍니다.vmstat -d
명령어와 유사한 정보를 제공하지만, 디스크별 I/O 통계를 더 자세하게 보여줍니다. 디스크 I/O 병목 현상 분석에 특화된 도구입니다.
결론적으로, vmstat
, top
, iostat
은 각각 장단점을 가지고 있으며, 상황에 따라 적절한 도구를 선택하여 사용하는 것이 중요합니다. vmstat
은 시스템 전체적인 성능 추이를 빠르게 파악하는 데 유용하며, top
은 특정 프로세스의 성능 정보를 자세하게 확인하는 데 유용하고, iostat
은 디스크 I/O 병목 현상을 심층적으로 분석하는 데 유용합니다.