[Shell Script] 스왑 메모리 감시하기

 스왑 메모리 감시하기 




#!/bin/sh

swapcount_limit=10                                                    #1  
 
swapcount=$(vmstat 1 6 | awk 'NR >=4 {sum += $7 + $8} END{print sum}')#2  

if [ "$swapcount" -ge "$swapcount_limit" ]; then                      #3

    date_str=$(date '+%Y/%m/%d %H:%M:%S')                             #4
 
    echo "[$date_str] Swap Alert: $swapcount (si+so)"                 #5
    /home/user1/bin/alert.sh
fi

남은 메모리를 감시하여 스왑 발생시 경고하는 스크립트 입니다 . 

 

vmstat 명령어 

vmstat 명령어는 서버의 현재 리소스 상태를 표시합니다 . 






명령어 인수로 1 3을 지정했습니다. 
1초마다 3회 측정한다는 의미입니다 . 
작성한 스크립트에서는 1 6 으로 지정했습니다 . 


#1 : 스왓 횟수 감시 허용값을 설정합니다 .  
        스왓 아웃 횟수를 모두 더한값이 허용값 이상이면 경고 합니다 . 


swapcount_limit=10    



#2 
  • 스왑 횟수를 취득하기 위한 vmstat 명령어를 사용합니다 . 
  • si는 swap in ,so는 swap out 입니다. 
    • 7번 컬럼과 7번 컬럼의 더한 값이 지표입니다  
  •  awk 명령어로 NR>=4 로 필터 해서 헤더 두줄과 첫번 째 출력값을 넘기고 4번 째 줄부 터 데이터를 출력합니다.
  • 마지막  END 블록으로 sum을 출력하면 최근 5초간 스왑 횟술르 표시합니다 . 
swapcount=$(vmstat 1 6 | awk 'NR >=4 {sum += $7 + $8} END{print sum}')






#3
: 이곳에서 계측 한 스왑 횟수가 미리 정의한 허용값을 넘었는지 if문으로 판별후 분기합니다 . 

if [ "$swapcount" -ge "$swapcount_limit" ]; then  



#4 : date 명령어로 현재 시간을 표시합니다 . 

date_str=$(date '+%Y/%m/%d %H:%M:%S')                             #4


#5 : 경고 표시 후 스왑 발생 횟수를 출력합니다 . 
    echo "[$date_str] Swap Alert: $swapcount (si+so)"                 #5
    /home/user1/bin/alert.sh
 




결과


stress 로 메모리에 과부화 주기


 


#stress --vm 2 --vm-bytes 128M --timeout 60s

새로운 터미널을 열고 작성한 스크립트를 실행합니다 . 






댓글