准备Linux脚本(保存为 check_server_usage.sh)
bash
#!/bin/bash
# 服务器利用率检查脚本(单机版)- 带IP输出
# 输出:IP/CPU/内存/磁盘/负载利用率 + 低利用率判断
# -------------------------- 函数:获取本机IP地址 -------------------------
get_ip_address() {
# 获取所有非回环IP地址(内网IP)
local ip_list=$(hostname -I 2>/dev/null)
if [ -z "$ip_list" ]; then
# 备用方法:使用 ip 命令
ip_list=$(ip route get 1 | awk '{print $7; exit}' 2>/dev/null)
fi
if [ -z "$ip_list" ]; then
# 最后备用:使用 ifconfig
ip_list=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -1 2>/dev/null)
fi
echo "${ip_list:-未知}" # 如果都获取不到,显示"未知"
}
# -------------------------- 函数:获取CPU空闲率(%) -------------------------
get_cpu_idle() {
# 使用 top 非交互模式获取 CPU 状态(取1次快照)
local cpu_line=$(top -bn1 | grep 'Cpu(s)')
local idle_str=$(echo "$cpu_line" | awk '{print $8}' | cut -d'%' -f1)
echo "${idle_str//,/}" # 去除逗号
}
# -------------------------- 函数:获取内存使用率(%) -------------------------
get_mem_usage() {
local mem_info=$(free | awk '/Mem:/')
local total=$(echo "$mem_info" | awk '{print $2}')
local used=$(echo "$mem_info" | awk '{print $3}')
local usage_pct=$(( (used * 100) / total ))
echo "$usage_pct"
}
# -------------------------- 函数:获取磁盘使用率(%,根分区) -------------------------
get_disk_usage() {
local disk_info=$(df -P / | awk 'NR==2')
local usage_str=$(echo "$disk_info" | awk '{print $5}')
echo "${usage_str//%/}"
}
# -------------------------- 函数:获取负载平均值(1分钟) -------------------------
get_load_avg() {
local load_line=$(uptime)
local load_1min=$(echo "$load_line" | awk -F 'load average:' '{print $2}' | awk '{print $1}' | tr -d ',')
echo "$load_1min"
}
# -------------------------- 主逻辑:采集数据并输出 -------------------------
main() {
echo "=============================================="
echo "服务器利用率检查报告(单机版)"
echo "=============================================="
echo "检查时间:$(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名:$(hostname)"
echo "IP地址:$(get_ip_address)" # 新增:显示IP地址
echo "----------------------------------------------"
# 采集指标
local cpu_idle=$(get_cpu_idle)
local mem_usage=$(get_mem_usage)
local disk_usage=$(get_disk_usage)
local load_avg=$(get_load_avg)
local cpu_cores=$(nproc)
local load_threshold=$(echo "scale=2; 0.5 * $cpu_cores" | bc)
# 输出原始数据
echo "【CPU】"
echo " 空闲率:${cpu_idle}% (使用率:$((100 - ${cpu_idle%.*}))%)"
echo " 核心数:$cpu_cores 核"
echo "----------------------------------------------"
echo "【内存】"
echo " 使用率:$mem_usage% (剩余:$((100 - mem_usage))%)"
echo "----------------------------------------------"
echo "【磁盘】(根分区 /)"
echo " 使用率:$disk_usage% (剩余:$((100 - disk_usage))%)"
echo "----------------------------------------------"
echo "【负载平均值】(1分钟)"
echo " 当前值:$load_avg (阈值:$load_threshold,低于阈值表示负载低)"
echo "----------------------------------------------"
# 判断是否"低利用率"
echo "【低利用率判断】"
local low_util=false
# CPU:空闲率 >70%(使用率 <30%)
if (( $(echo "$cpu_idle > 70" | bc -l) )); then
echo " ✅ CPU利用率低(空闲率 ${cpu_idle}%,使用率 <30%)"
low_util=true
else
echo " ❌ CPU利用率不低(空闲率 ${cpu_idle}%,使用率 ≥30%)"
fi
# 内存:使用率 <30%
if (( mem_usage < 30 )); then
echo " ✅ 内存利用率低(使用率 ${mem_usage}%,<30%)"
low_util=true
else
echo " ❌ 内存利用率不低(使用率 ${mem_usage}%,≥30%)"
fi
# 磁盘:使用率 <50%
if (( disk_usage < 50 )); then
echo " ✅ 磁盘利用率低(使用率 ${disk_usage}%,<50%)"
low_util=true
else
echo " ❌ 磁盘利用率不低(使用率 ${disk_usage}%,≥50%)"
fi
# 负载:当前值 < 阈值
if (( $(echo "$load_avg < $load_threshold" | bc -l) )); then
echo " ✅ 负载低(当前 $load_avg < 阈值 $load_threshold)"
low_util=true
else
echo " ❌ 负载不低(当前 $load_avg ≥ 阈值 $load_threshold)"
fi
# 总结
if $low_util; then
echo -e "\n📊 结论:该服务器部分/全部指标利用率较低,适合作为低负载节点。"
else
echo -e "\n📊 结论:该服务器利用率较高,不适合作为低负载节点。"
fi
echo "=============================================="
}
# 执行主函数
main
上传到Linux服务器到对应的目录,然后执行下面的脚本
bash
sed -i 's/\r$//' check_server_usage.sh
chmode 777 check_server_usage.sh
sh check_server_usage.sh
执行之后效果
