linux查看服务器利用率

准备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

执行之后效果

相关推荐
kebidaixu8 小时前
BCU 平台 RS485 驱动适配:从 THVD1406 到 ISO3082
linux
映翰通朱工10 小时前
工业4G网关无公网IP远程运维实战(内网终端异地访问方案)
运维·服务器·网络·安全·智能路由器
洪晓露10 小时前
将 rke2 集群证书延长至 10 年
运维·服务器·数据库
z落落10 小时前
C#WinForm 窗体切换与窗体传值(登录跳转案例)+WinForm 窗体传值(从上往下传、从下往上传)
开发语言·windows·c#
Dontla11 小时前
git bash打开Claude code报错:Claude Code on Windows requires git-bash.(别把git装其他位置,严格按照默认安装)找不到claude code
windows·git·bash
谢平康11 小时前
解决用 rm 报bash: /usr/bin/rm: Argument list too long错
linux·运维·运维开发
IP老炮不瞎唠11 小时前
Python 价格监控如何实现?思路与实用方法分享
运维·服务器·网络
comcoo11 小时前
电脑自动干活不用值守!OpenClaw 本地部署完整实操流程
windows·开源·github·open claw部署·open claw部署包
睡不醒男孩03082311 小时前
CLup 6.x 版本中针对StarRocks 存算一体集群的完整操作手册
java·服务器·网络·clup
Tokai_Teio_112 小时前
第四届黄河流域 misc
运维·服务器