Repository navigation
Expand file tree
/
Copy pathswap-check.sh
More file actions
63 lines (56 loc) · 2.26 KB
/
Copy pathswap-check.sh
File metadata and controls
63 lines (56 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
# =====================================================================
# swap-check.sh
# 스왑 상태 모니터링 + swapoff 가능 여부 사전 점검
# =====================================================================
# 사용법:
# ./swap-check.sh # 현재 상태만 출력
# ./swap-check.sh --threshold 1024 # 1GB 초과 시 경고 (exit 1)
#
# crontab 등록 예시 (시간당 1회):
# 0 * * * * /opt/scripts/swap-check.sh --threshold 1024 || mail -s "Swap usage high" ops@example.com
set -u
THRESHOLD_MB=0
for arg in "$@"; do
case "$arg" in
--threshold)
shift
THRESHOLD_MB="${1:-0}"
;;
esac
done
# free -m 출력 파싱
MEM_TOTAL=$(free -m | awk 'NR==2 {print $2}')
MEM_USED=$(free -m | awk 'NR==2 {print $3}')
MEM_AVAILABLE=$(free -m | awk 'NR==2 {print $7}')
SWAP_TOTAL=$(free -m | awk 'NR==3 {print $2}')
SWAP_USED=$(free -m | awk 'NR==3 {print $3}')
echo "================================================================"
echo " 메모리·스왑 상태 ($(date '+%Y-%m-%d %H:%M:%S'))"
echo "================================================================"
printf " RAM: total %5dMB | used %5dMB | available %5dMB\n" "$MEM_TOTAL" "$MEM_USED" "$MEM_AVAILABLE"
printf " Swap: total %5dMB | used %5dMB\n" "$SWAP_TOTAL" "$SWAP_USED"
echo ""
# swapoff 안전성 점검
if [ "$SWAP_USED" -gt "$MEM_AVAILABLE" ]; then
echo " [WARN] swapoff -a 위험"
echo " 스왑 사용량(${SWAP_USED}MB) > 가용 메모리(${MEM_AVAILABLE}MB)"
echo " 스왑 해제 시 시스템 hang 가능. 조정 후 시도."
elif [ "$SWAP_USED" -eq 0 ]; then
echo " [OK] 스왑 사용량 0. 정리 불필요."
else
echo " [OK] swapoff -a 안전:"
echo " 스왑 사용량(${SWAP_USED}MB) < 가용 메모리(${MEM_AVAILABLE}MB)"
echo " \"sudo swapoff -a && sudo swapon -a\" 실행 가능"
fi
# 임계치 체크
if [ "$THRESHOLD_MB" -gt 0 ]; then
if [ "$SWAP_USED" -gt "$THRESHOLD_MB" ]; then
echo ""
echo " [ALERT] 스왑 사용량(${SWAP_USED}MB) > 임계치(${THRESHOLD_MB}MB)"
echo "================================================================"
exit 1
fi
fi
echo "================================================================"
exit 0