개요
- Application 단의 문제가 아닌, 서버의 문제가 발생했을 시 어떤식으로 확인하면 좋을지 순차적으로 정리한다.
- 사례를 보면서, 경우의 수에 맞게 모니터링하는 방법을 기재함
종류
top
* 시스템의 상태를 전반적으로 빠르게 파악가능 (CPU, Memory, Process)
* 순간의 정보를 확인하려면 `-b` 옵션을 추가하면 된다 (배치모드임)
* 원하는 시간별로 확인하려면 `-n` 옵션을 주고 뒤에 초를 넣으면 된다.
-
top 실행 후 명령어
- shift + p : CPU 사용률 내림차순
- shit + m : 메모리 사용률 내림차순
- shift + t : 프로세스가 돌아가고 있는 시간 순
- k : kill. k 입력 후 PID 번호 작성. signal은 9
- f : sort field 선택 화면 -> q 누르면 RES순으로 정렬
- a : 메모리 사용량에 따라 정렬
- b : Batch 모드로 작동
- 1 : CPU Core별로 사용량 보여줌
-
ps와 top의 차이점
- ps는 ps한 시점에 proc에서 검색한 cpu 사용량
- top은 proc에서 일정 주기로 합산해 cpu 사용율 출력
이미지를 통해 보는방법 분석
- 이 서버는 274일전에 구동되었음
- load average 간격은 1분 5분 15분간의 평균 실행/대기 프로세스 수이다.
- Tasks : 프로세스의 개수고, 이 서버는 137개이다.
- 한개가 구동중이고 136 개는 sleeping 상태임
- PR 은 실행 우선순위이며, 20이면 기본순위임
- VIRT 는 메모리 사용량임 (virtual memory 의 사용량이고 RES 가 실제 메모리의 사용량임
중요
)
S : 프로세스 상태(작업중, I/O 대기, 유휴 상태 등)
* SHR 옆에 있는 S 항목으로 볼 수 있음
* D : Uninterruptiable sleep. 디스크 혹은 네트워크 I/O를 대기
* R : 실행 중(CPU 자원을 소모)
* S : Sleeping 상태, 요청한 리소스를 즉시 사용 가능
* T : Traced or Stopped. 보통의 시스템에서 자주 볼 수 없는 상태
* Z : zombie. 부모 프로세스가 죽은 자식 프로세스
위 정보를 통해 알수있는건 application 이 3GB 의 메모리를 사용중이고, 기타 단편화비율은 얼마 되지 않는구나를 알수 있음
SE들이 보는 가장 중요한 정보는 셋째줄 CPU 란인데, 99.8%id 라고 나와있는 부분인데, CPU 가 99.8프로 놀고있다는 소리임 (이게 가장 중요함!!)
top 은 이정도만 볼줄알아도 충분함
vmstat
- 프로세스, 메모리, 페이징, I/O 블럭, CPU 활동 사항들의 정보를 출력하는 기능
- vmstat에서 중요한 것은 procs 영역의 b 필드이다. b의 수치가 높은 경우 i/o 작업을 위해 cpu가 계속 대기 상태로 있는 경우로서
이런 경우에는 디스크i/o 문제를 확인해 볼 필요가 있다. 또한 스왑아웃(so)이 지속적으로 발생한다면 메모리가 부족한 것이므로, 증설이 필요하다.
- 하지만 일정간격으로 스왑아웃이 발생되는 것은 정상적이며, 스왑아웃(so)필드는 항상 0에 가까워야 한다.
이미지를 통해 보는방법 분석
-
proc 필드
- r : cpu 접근 대기 중인 실행 가능한 프로세스 수
- b : I/O 자원을 할당 받지 못해 블록 된 프로세스의 수
-
memory 필드
- swapd : 사용된 가상 메모리의 용량
- free : 사용가능한 여유 메모리의 용량
- buffer : 버퍼에 사용된 메모리의 총량
- cache : 페이지 캐시에 사용된 메모리의 용량
-
swap 필드
- si : swap-in 된 메모리의 양 (kb)
- so : swap-out 된 메모리의 양 (kb). 스왑 아웃이 지속적으로 발생하였다면 메모리 부족을 의심 해 볼수 있다.
보기 너무 어렵다면? 옵션을 통해 줄수 있음
디스크의 세부사용량을 보고싶다면..
- vmstat -d 옵션을 주면 가능하다. 하지만 굳이 이렇게 볼필요 까진....없을것 같다.
iostat
- sysstat 중 가장 기본적인 명령어로, CPU 및 디스크 입출력에 대한 기본 정보를 제공한다.
- %user - 유저가 사용한 프로세스가 사용된시간(백분율)
- %nice - 자업 우선순위가 바뀐 프로세스가 사용된 시간
- %system - 시스템이 작동한 시간
- %iowait - 입출력(I/O) 대기시간(%idle과 다르며 iowait가 높은경우 메모리 부족이나 비효율적인 I/O부시스템이 구성되어 있음을 의미)
- %steal - Steal CPU의 작동 시간
- %idle - 입출력(I/O) 대기시간(%idle과는 다르며 ioswait가 높은경우 메모리 부족이나 비효율적인 I/O부 시스템이 구성되어 있음을 의미)
- tps - 디스크 장치에서 초당 처리한 입출력의 작업 개수
- kB-read/s - 디스크 장치에서 초당 읽어들인 데이터 블록 단위
- kB_wrtn/s - 디스크 장치에서 초당 쓴 데이터 블록 단위
- kB_wrtn - 디스크 장치에서 쓴 데이터 블록 단위
dmesg
- dmesg 명령어는 시스템 부팅 메세지를 확인하는 명령어이다.
- 또한 커널에서 출력되는 메세지를 일정 수준 기록하는 버퍼 역할을 수행하며, 커널 부팅 중에 에러가 났다면 어느 단계에서 에러가 났는지 범위를 좁히고 찾아내는데 도움이 된다.
SAR (System Activity Reporter) 를 이용하기 [가장중요!!]
-
sar에서 확인할 수 있는 사항
- I/O 전송량 - 페이징- 프로세스 생성 숫자
- 블락 디바이스 활동
- 인터럽트 - 네트워크 통계
- run 큐 및 시스템 부하 평균
- 메모리와 스왑 공간 활용 통계
- 메모리 통계
- CPU 이용도
- 특정 프로세스에 대한 CPU 이용도
- inode, 파일, 기타 커널 테이블에 대한 상태
- 시스템 스위칭 활동(context switch)
- 스와핑 통계 - 특정 프로세스 통계
- 특정 프로세스의 자식 프로세스 통계
- TTY 디바이스 활동
-
사용옵션 정리
- sar명령어에 옵션을 주지 않고 수행했을 경우 -u옵션이 default로 적용된다.
- sar -A: 모든 관련정보를 출력한다.
- Shell> sar
주요 옵션
- sar -r (가용 메모리 점검 및 메모리 공간의 통계를 출력한다)
kbmemfree : 사용가능한 총 메모리의 양(kbytes)
kbmemused : 사용중인 총 메모리의 양(kbytes), 커널에서 사용중인 메모리는 제외
%memused : 사용된 메모리의 %
kbbuffers : 커널에서 buffer 메모리로 총 사용된 메모리의 양 (kbytes)
kbcached : 커널에서 cache data 로 사용된 총 메모리의 양(kbytes)
kbcommit : 현재 작업을 위해 필요한 메모리의 총량(kbytes),메모리 부족이 발생하지 않기 위한 RAM/swap 사용량의 추정치
%commit : 현재 작업을 위해 필요한 메모리 총량의 %, kernel은 보통 메모리를 overcommits하므로 일반적으로 100%를 넘을 것이다.
- sar -n DEV | EDEV | SOCK
- 네트워크 device 의 결과로 부터 통계를 봄
IFACE: Network Interface 이름
rxpck/s: 초당 받은 패킷수
txpck/s: 초당 전송한 패킷수
rxbyt/s: 초당 받은 bytes
txbyt/s: 초당 전송한 bytes
rxcmp/s: 압축된 패킷을 초당 받은 수
txcmp/s: 압축된 패킷을 초당 전송한 수
rxmcst/s: 초당 받은 다중 패킷 수
위 모든 명령어는 Sysstat 을 통해 이루어지며, 해당 util 이 깔려있지 않으면 설치해야 한다. 우리가 이용하는 서버는 SE가 미리 깔아놓은것 뿐이다.
referrence
https://server-talk.tistory.com/49
https://zzsza.github.io/development/2018/07/18/linux-top/
http://www.cubrid.com/CUBRIDwiki/71317