리눅스 및 DB

[리눅스] vmstat 과 sar 명령

끄적끄적 2008. 6. 26. 13:59

리눅스의 메모리, CPU, IO 등을 확인할 수 있는 유용한 명령어로 vmstat과 sar가 있다.

1. vmstat 5 와 같이 하면 5초 간격으로 모니터링 정보를 갱신하며 보여준다. 해당 항목들의 의미와 점검점은 다음과 같다.

구분 설명
proc r CPU에서 대기 중인 프로세스의 수를 의미한다. 이 값이 증가하거나 r 개수/cpu 개수의 값이 항상 2 이상 나온다면 CPU의 성능을 높여주어야 한다.
b 동작하는 블럭 프로세스의 수
이 값이 높다면 블럭 디바이스의 속도를 높여야 한다.
w swap out되는 프로세서의 수이다.w에 값이 증가하면 메모리가 매우 부족하다는 의미이므로 메모리를 늘려야 한다.
memory(KB) swapd 현대 메모리가 부족해 swap을 사용하고 있는 양을 의미한다. 평소에 이 값이 높다고 해도 free 메모리의 여유가 있다면 메모리가 부족한 것이 아니다. 한번 swap으로 떨어진 프로레스는 메모리의 여유가 생기더라도 CPU에서 다시 호풀하지 않는 한 메모리로 넘어 오지 않는다.
free 현재 사용하지 않고 남아 있는 메모리
buffer 버퍼로 사용되고 있는 메모리 양(퍼포먼스에 관련)
cache 현재 캐시로 사용되고 있는 메모리 양(퍼포먼스에 관련)
swap(KB/s) si 디스크에서 메모리로 swap in 되는 양을 의미하며, swap 공간에 있는 데이터를 실제 메모리로호출한다.
so 메모리에서 디스크로 swap out 되는 양을 의미하며, 이는 곧 메모리가 부족해 실제 메모리에 있는 데이터를 swap 공간으로 보내는 것이다.
io(blocks/s) bi/bo bi는 초당 블럭 디바이스로 보내는 블럭 수이며 bo는 블럭 디바이스로부터 받은 블럭 수이다. 이 두 값이 높다는 것은 I/O 즉 하드디스크에 읽고 쓴느 값이 많다는 것이다.
system in 초당 인터럽트되는 양이다. 여기에는 time clock과 이더넷의 패킷도 포함되는데 즉 인터럽트의 수가 많다면 네트워크 쪽을 점검해볼 필요가 있다.
cs 초당 context switch되는 양이다. CPU에사 실행하는 명령들이 자신의 우선순위보다 높은 명령이 오거나 혹은 자신에게 할당된 CPU 점유 시간이 만료되면 우선순위에서 밀리게 되고 이때 context switch가 발생하게 된다.
cpu us 유저 프로세스가 CPU를 사용하는 시간
sy 시스템 프로세스가 CPU를 사용하는 시간
id CPU가 아무 일도 하지 않고 여유 있는 시간

출처 : Tong - 낯선남자님의 Linux통

스왑아웃이 지속적으로 발생한다면 메모리가 부족한 것이다. w필드의 값이 증가하면 메모리가 부족하다는 의미이므로 메모리를 늘려야한다. so필드(swap out)는 0에 가까워야 한다. 평소에 swpd필드의 값이 높다고 해도 free 메모리에 여유가 있다면 메모리가 부족한 것이 아니다.

sy필드의 값이 지나치게 높으면 디스크 I/O에 문제가 있을 가능성이 크다.
그리고 시스템 전체의 부하가 높은데 id필드의 값이 일반적으로 10%를 넘는다면 I/O나 메모리에 문제가 있을 가능성이 있다. I/O에 문제점이 있다는 것을 발견하면 iostat 등의 명령어를 추가로 사용하여 세부사항을 분석할 수 있다.

id필드의 값이 항상 0이라면 CPU를 100% 사용하고 있다는 것을 의미한다. 그러나 항상 100%로 사용하고 있다면 어떤 작업이 계속 축적되고 있으며 CPU가 과부하를 가진다는 것을 의미한다. 이 때는 top, ps, sar등의 명령어를 사용하여 CPU를 계속 사용하고 있는 프로세스를 찾아 적절하게 대응해야 한다.

2. sar 명령 : 시스템에서 10분간격으로 성능 모니터링 한 내용을 /var/log/sa 에 저장해 둔 내용을 보여준다.

그냥 sar를 치면 오늘 현재 내용을 보여주고, sar -f /var/log/sa/sa15 와 같이 하여 특정일의 내용을 볼 수 있다.
sar명령의 여러 옵션(-b, -B, -d, -n 등)을 통해 세부적인 내용 확인도 가능하다.

DB서버나 서버단 프로세스가 많은 서버에서 성능개선을 위해 참고하면 좋은 명령어

반응형