...
리눅스 서버 상태 정보 체크하기
vmstat (virtual memory stat)
vmstat 는 리눅스의 프로세스, 메모리, 페이징, I/O 블럭, CPU 활동 사항들의 정보를 출력하는 기능을 한다.
보통 엔지니어링을 하면서 시스템이 느려지거나 하는 요청들이 왔을 때 서버에 문제가 없는지 점검할 때 사용하는 편이다.
$ vmstat [옵션] [delay] [count]
# delay : 결과가 출력되는 주기를 의미한다. 이 값을 지정하지 않으면 한 번만 수행하고 종료된다.
# count : 데이터를 몇 번이나 출력할지를 의미한다. 이 옵션을 지정하지 않고 백그라운드 작업으로 수행할 경우, 작업자가 명시적으로 이 명령어를 죽이지 않는 한 계속 수행한다.
옵션 | 설명 |
-n | 주기적으로 헤더를 출력하지 말고, 한번만 헤더를 출력 |
-a (active) | buffer와 cache대신 active/inactivate로 메모리사용량 결과 출력 |
-t (timestamp) | 날짜 + 시간을 출력 |
-w (wide) | 출력결과의 너비를 맞춤 |
-d (disk) | 디스크 상태조회 |
$ vmstat 1 # 1초마다 현재 서버 정보 계속 출력
$ vmstat 2 5 # 2초간격으로 5번만 출력
vmstat 필드 설명
vmstat에서 중요한 것은 procs 영역의 b 필드이다.
b의 수치가 높은 경우 i/o 작업을 위해 cpu가 계속 대기 상태로 있는 경우로서 이런 경우에는 디스크i/o 문제를 확인해 볼 필요가 있다.
또한 스왑아웃(so)이 지속적으로 발생한다면 메모리가 부족한 것을 말하기도 한다.
하지만 일정간격으로 스왑아웃이 발생되는 것은 정상적이며, 대신 스왑아웃(so)필드는 항상 0에 가까워야 한다.
procs | r | CPU 접근 대기중인 실행 가능한 프로세스 수 (CPU의 처리가 어느정도 인지 추적할 수 있음) |
b | io 자원을 할당받지 못해 블록된 프로세스 수 (b의 수치가 높은 경우 i/o 작업을 위해 cpu가 계속 대기 상태로 있다는 뜻이므로 디스크의 i/o 문제를 확인해야한다.) |
|
memory (KB) |
swpd | swap을 사용하고 있는 양을 의미한다. (이는 현재 시스템 메모리가 부족하다는 방증이다. 다만, 이 값이 높아도 free에 많은 메모리의 여유가 있다면 괜찮다.) |
free | OS에서 실제 남은 메모리의 공간을 의미한다. | |
buff | 버퍼에 사용된 메모리 용량 | |
cache | 페이지 캐시에 사용된 메모리 용량 | |
swap (KB/s) |
si | 디스크에서 메모리로 swap in되는 양을 의미하며, swap 공간에 있는 데이터를 메모리로 호출한다. |
so | swap-out된 메모리의양 (KB) 메모리에의 공간이 부족하여 swap 공간으로 보내는 것이다. 지속적으로 발생한다면 메모리 부족을 의심해야하고 0인 경우가 좋다. |
|
io (blocks/s) |
bi | bi는 초당 블럭 디바이스로 보내는 블럭 수이다. |
bo | bo는 초당 블럭 디바이스로 부터 받은 블럭수이다. (bi/bo가 높다면 하드디스크에 쓰고 읽는 값이 많다는 것이다.) | |
system | in | 초당 인터럽트되는 양이다. 이 양이 많다면 네트워크 쪽을 점검해볼 필요가 있다. |
cs | 문맥교환되는 양을 뜻한다. | |
cpu | us | CPU가 유저레벨의 코드를 실행한 시간(%) |
sy | CPU가 시스템레벨의 코드를 실행한 시간(%) | |
id | 사용가능한 CPU의 시간율 id = 100 -(us + sy), id가 0인 경우 CPU를 100%로 사용하고 있는 것이므로 top, ps, sar등의 명령으로 CPU를 계속해서 사용하는 프로세스를 찾아야한다. | |
wa | 디스크 혹은 기타 io 작업으로 인해 CPU가 대기하는 시간 비율 |
간단 메모리 사용량 표시 (-a)
# buffer와 cache대신 active/inactivate로 메모리사용량 결과 출력
$ vmstat -a
inact : 사용되지 않은 메모리 양
active : 사용 중인 메모리양
시간까지 표시 (-t)
디스크 사용량 (-d)
reads / writes 필드 | 설명 |
total | 성공한 모든 읽기/쓰기 작업개수 |
merged | 하나의 io로 묶은 읽기/쓰기 작업수 |
sectors | 성공적으로 읽은/쓴 섹터수 |
ms | 읽기/쓰기 작업을 하는데 소요된 시간(밀리초) |
io필드 | 설명 |
cur | 현재 수행중인 io수 |
sec | io를 수행하는데 소요된 시간(초) |
부팅 이후 생성된 총 작업 수 (-f)
앞에 시간을 넣어 출력
$ vmstat | awk '{now=strftime("%F %T"); print now," ",$0}'
CPU / 메모리 / 디스크 / 네트워크 정보 명령어 정리
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.