You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CPU与内存监控脚本异常排查咨询:使用率显示错误及告警失效问题

CPU与内存监控脚本异常排查咨询:使用率显示错误及告警失效问题

嗨,我来帮你梳理下这个监控脚本的问题——你现在遇到了CPU使用率显示0%、告警逻辑没触发的情况,咱们一步步拆解解决:

一、CPU使用率计算的核心问题

你当前用的cpuUsage=$(top -bn1 | awk '/Cpu/ { print $2}')有两个常见坑:

  1. top输出格式不兼容:不同Linux发行版的top输出字段差异很大,比如有些版本中Cpu行的第一个数值只是用户态使用率(%us),而非总使用率;还有的版本输出里数值带逗号(比如0.3,),直接取$2会得到带符号的无效数值。
  2. 匹配规则太局限:部分系统的top输出是小写cpu开头,/Cpu/会匹配不到目标行,导致cpuUsage为空,最终显示0%。

修复方案

推荐用更稳定的方式计算CPU总使用率(通过空闲率反推):

# 方案1:兼容多数top版本
cpuUsage=$(top -bn1 | awk '/%[Cc]pu/ {print 100 - $8}')
# 方案2:如果安装了mpstat,结果更准确(取1秒内的平均使用率)
cpuUsage=$(mpstat 1 1 | awk '/Average/ {print 100 - $12}')

二、内存使用率的逻辑错误

你当前的memUsage=$(free -m | awk '/Mem/{print $3}')获取的是已用内存的MB绝对值,不是百分比!这根本没法用来判断是否超过70%阈值。

修复方案

改成计算内存使用率百分比(取整数方便后续判断):

memUsage=$(free | awk '/Mem/ {printf "%.0f", $3/$2*100}')

三、告警逻辑的语法错误

你写的if [ "$cpuUsage" -ge 70]; then有两个致命问题:

  1. 语法格式错误:[是shell的测试命令,参数之间必须用空格分隔,70和]之间少了空格,会导致脚本报错中断。
  2. 整数比较不适用:CPU使用率通常是小数(比如68.5),用-ge这种整数比较运算符会直接报错,没法触发告警。

修复方案

用bc工具做浮点比较,同时加上红色警告的ANSI转义码:

# CPU告警(浮点比较)
if (( $(echo "$cpuUsage >= 70" | bc -l) )); then
    echo -e "\033[31mWARNING: CPU usage exceeds 70%! Current usage: $cpuUsage%\033[0m"
fi

# 内存告警(整数比较即可)
if [ "$memUsage" -ge 70 ]; then
    echo -e "\033[31mWARNING: Memory usage exceeds 70%! Current usage: $memUsage%\033[0m"
fi

完整修正后的脚本

#!/bin/bash

# 获取CPU使用率(兼容多数系统)
cpuUsage=$(top -bn1 | awk '/%[Cc]pu/ {print 100 - $8}')
# 若系统安装了mpstat,可替换为更稳定的:
# cpuUsage=$(mpstat 1 1 | awk '/Average/ {print 100 - $12}')

# 获取内存使用率(百分比整数)
memUsage=$(free | awk '/Mem/ {printf "%.0f", $3/$2*100}')

# 输出当前使用率
echo "CPU Usage: $cpuUsage%"
echo "Memory Usage: $memUsage%"

# CPU告警逻辑(红色警告)
if (( $(echo "$cpuUsage >= 70" | bc -l) )); then
    echo -e "\033[31mWARNING: CPU usage is above 70%! Current: $cpuUsage%\033[0m"
fi

# 内存告警逻辑(红色警告)
if [ "$memUsage" -ge 70 ]; then
    echo -e "\033[31mWARNING: Memory usage is above 70%! Current: $memUsage%\033[0m"
fi

备注:内容来源于stack exchange,提问作者linuxnoobie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:33:04