本文目录导读:

- 使用
free命令监控 - 使用
swapon命令监控 - 从
/proc/swaps和/proc/meminfo读取 - 完整的监控脚本示例
- 简易实时监控(1秒刷新)
- 配合
vmstat监控Swap活动 - 使用建议
在Shell脚本中监控Swap交换分区,主要有以下几种常用方法:
使用 free 命令监控
#!/bin/bash
# 获取Swap信息
swap_total=$(free -m | awk '/^Swap:/ {print $2}')
swap_used=$(free -m | awk '/^Swap:/ {print $3}')
swap_free=$(free -m | awk '/^Swap:/ {print $4}')
swap_percent=$(awk "BEGIN {printf \"%.2f\", $swap_used / $swap_total * 100}")
echo "Swap Total: ${swap_total}MB"
echo "Swap Used: ${swap_used}MB"
echo "Swap Free: ${swap_free}MB"
echo "Swap Usage: ${swap_percent}%"
# 设置告警阈值(例如80%)
threshold=80
if (( $(echo "$swap_percent > $threshold" | bc -l) )); then
echo "警告: Swap使用率超过${threshold}%!"
fi
使用 swapon 命令监控
#!/bin/bash
# 使用swapon显示详细Swap信息
swapon --show | awk 'NR>1 {
printf "设备: %s\n类型: %s\n大小: %s\n已用: %s\n优先级: %s\n\n",
$1, $2, $3, $4, $5
}'
# 获取所有Swap设备的总使用率
total_swap=$(swapon --show --noheadings | awk '{sum+=$3} END {print sum}')
used_swap=$(swapon --show --noheadings | awk '{sum+=$4} END {print sum}')
if [ -n "$total_swap" ] && [ "$total_swap" != "0" ]; then
percent=$(awk "BEGIN {printf \"%.2f\", $used_swap / $total_swap * 100}")
echo "总Swap使用率: ${percent}%"
fi
从 /proc/swaps 和 /proc/meminfo 读取
#!/bin/bash
# 从/proc/meminfo获取Swap信息
swap_total=$(grep SwapTotal /proc/meminfo | awk '{print $2}')
swap_free=$(grep SwapFree /proc/meminfo | awk '{print $2}')
swap_used=$((swap_total - swap_free))
# 转换为MB
swap_total_mb=$((swap_total / 1024))
swap_used_mb=$((swap_used / 1024))
swap_free_mb=$((swap_free / 1024))
echo "Swap Total: ${swap_total_mb}MB"
echo "Swap Used: ${swap_used_mb}MB"
echo "Swap Free: ${swap_free_mb}MB"
# 计算使用率
if [ "$swap_total" -gt 0 ]; then
percent=$(awk "BEGIN {printf \"%.2f\", $swap_used / $swap_total * 100}")
echo "Swap Usage: ${percent}%"
fi
完整的监控脚本示例
#!/bin/bash
# Swap监控脚本
THRESHOLD_WARNING=80
THRESHOLD_CRITICAL=90
LOG_FILE="/var/log/swap_monitor.log"
ALERT_EMAIL="admin@example.com"
monitor_swap() {
# 获取Swap信息(KB单位)
swap_total=$(grep SwapTotal /proc/meminfo | awk '{print $2}')
swap_free=$(grep SwapFree /proc/meminfo | awk '{print $2}')
swap_used=$((swap_total - swap_free))
# 计算百分比
if [ "$swap_total" -gt 0 ]; then
percent=$((swap_used * 100 / swap_total))
else
percent=0
fi
# 转换为人类可读格式
total_mb=$((swap_total / 1024))
used_mb=$((swap_used / 1024))
free_mb=$((swap_free / 1024))
# 记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - Swap: ${used_mb}MB/${total_mb}MB (${percent}%)" >> "$LOG_FILE"
# 告警逻辑
if [ "$percent" -ge "$THRESHOLD_CRITICAL" ]; then
echo "严重告警: Swap使用率 ${percent}% 超过临界阈值 ${THRESHOLD_CRITICAL}%!" | \
mail -s "Swap严重告警 $(hostname)" "$ALERT_EMAIL"
return 2
elif [ "$percent" -ge "$THRESHOLD_WARNING" ]; then
echo "警告: Swap使用率 ${percent}% 超过警告阈值 ${THRESHOLD_WARNING}%!" | \
mail -s "Swap警告 $(hostname)" "$ALERT_EMAIL"
return 1
fi
return 0
}
# 执行监控
monitor_swap
简易实时监控(1秒刷新)
#!/bin/bash watch -n 1 'free -m | grep -E "(Swap|total)"'
配合 vmstat 监控Swap活动
#!/bin/bash
# 监控Swap I/O活动
echo "监控Swap读写活动 (每5秒)"
echo "时间 si(从磁盘换入) so(换出到磁盘)"
vmstat 5 | awk '{if(NR>2) print strftime("%H:%M:%S"), $7, $8}'
使用建议
- 阈值设置:建议警告阈值设为60-80%,严重阈值设为90%
- 日志记录:将监控结果写入日志文件便于回溯
- 告警方式:结合邮件、短信或其他通知系统
- 持续监控:使用cron定时执行脚本
# crontab示例(每5分钟执行一次) */5 * * * * /path/to/swap_monitor.sh
选择哪种方法取决于具体需求,简单查看用free命令最方便,需要详细监控建议使用/proc/文件系统获取更精确的数据。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播