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

执行之后效果

相关推荐
代码AI弗森1 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
x***r1512 小时前
node-v0.12.2-x86安装步骤详解(附Node.js历史版本与32位配置教程)
windows
小小小米粒2 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
蜡台2 小时前
Python包管理工具pip完全指南-----2
linux·windows·python
^—app5668662 小时前
游戏运存小启动不起来临时解决方法
运维·服务器
Ujimatsu3 小时前
虚拟机安装Debian 13.x及其常用软件(2026.4)
linux·运维·ubuntu
千百元3 小时前
zookeeper启不来了
linux·zookeeper·debian
志栋智能3 小时前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
AnalogElectronic4 小时前
linux 测试网络和端口是否连通的命令详解
linux·网络·php
Edward111111115 小时前
4月28日防火墙问题
linux·运维·服务器