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

执行之后效果

相关推荐
女神下凡28 分钟前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
@兽血沸腾1 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
艺杯羹1 小时前
Windows原生软件锁设计:从暴力杀进程丢数据到零轮询事件驱动架构
windows·系统架构·开源·开源软件·内存管理·开源协议
且从容.4 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道4 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达6 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.7 小时前
ubuntu安装flink
linux·ubuntu·flink
数字新视界9 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨9 小时前
WSL2的安装与使用
linux·wsl