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

执行之后效果

相关推荐
tang7778926 分钟前
反爬虫场景下代理IP池的动态扩容与失效IP自动清理方案实现
linux·服务器·网络·爬虫代理·住宅代理ip
新时代牛马1 小时前
Linux 系统调用与IPC 完整篇:从syscall 入口、VDSO 到pipe/shm/futex 选型
linux·运维·服务器
黄一一9112432 小时前
跨平台视频图片压缩互转!离线视频压缩工具!Github开源轻松无损压缩视频!Win/Mac/Linux三端通用开源工具
windows·macos·音视频·开源软件
fpcc3 小时前
计算机原理—Linux是如何加载可执行文件到内存
linux
野熊佩骑3 小时前
Kubernetes实战系列文章(三) 之 K8S运维常用命令
linux·运维·docker·微服务·云原生·容器·kubernetes
码农客栈3 小时前
linux 设备树下的 platform 驱动编写
linux
小HANN3 小时前
Linux建站实战:CentOS7+LNMP 从零部署 ECShop 开源电商系统
linux·运维·服务器·经验分享
池塘游鱼3 小时前
VMware虚拟机安装Windows 10系统 超详细图文教程
windows·vmware
做运维的阿瑞3 小时前
Shell 脚本经典十三问:引号、变量、子 Shell 与重定向一次讲清问:引号、变量、子 Shell 与重定向一次讲清
linux·tcp/ip
昌原的儿子LEO3 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle