Linux Monitoring

풀어갈 나의 이야기·2021년 12월 4일
0
post-thumbnail

개요

  • 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). 스왑 아웃이 지속적으로 발생하였다면 메모리 부족을 의심 해 볼수 있다.

보기 너무 어렵다면? 옵션을 통해 줄수 있음

  • -K, -M, -k, -m

디스크의 세부사용량을 보고싶다면..

  • vmstat -d 옵션을 주면 가능하다. 하지만 굳이 이렇게 볼필요 까진....없을것 같다.

iostat

  • sysstat 중 가장 기본적인 명령어로, CPU 및 디스크 입출력에 대한 기본 정보를 제공한다.
    • iostat -c [출력시간][횟수]

  • %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 명령어는 시스템 부팅 메세지를 확인하는 명령어이다.
  • 또한 커널에서 출력되는 메세지를 일정 수준 기록하는 버퍼 역할을 수행하며, 커널 부팅 중에 에러가 났다면 어느 단계에서 에러가 났는지 범위를 좁히고 찾아내는데 도움이 된다.

  • 위 이미지를 보다 시피 쭉 리스트로 나오므로, grep 을 통해 추출해 낼 수 있다.

  • 모든 메세지를 삭제하며 입력 이후에 새롭게 로그 쌓기

    • dmesg -c
  • 하드 디스크 정보 확인

    • dmesg | grep sda
  • SCSI 타입의 하드디스크 정보 확인

    • dmesg | grep SCSI
  • IDE 타입의 하드디스크 정보 확인

    • dmesg | grep hda
  • NIC 정보 확인

    • dmesg | grep eth
  • 커널 정보 확인

    • dmesg | grep Linux

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

profile
깨끗한 스케치북 일수록 우아한 그림이 그려지법, 읽기 쉽고, 짧은 코드가 더 아름다운 법.. 또한 프로그래머의 개발은 구현할 프로그래밍이 아닌, 풀어갈 이야기로 써내려가는것.

0개의 댓글