目录

一、背景

二、分析

三、脚本

四、脚本解释

 1. 初始设置部分

 2. 主循环结构

 3. CPU使用率获取

(1)代码

(2)工作原理:

 4. 内存使用率获取

(1)代码

(2)工作原理:

 5. 时间戳获取

 6. 阈值检查与告警

 7. 休眠间隔

8、脚本整体工作流程

五、脚本执行

1、赋予执行权限

2、执行


一、背景

        为了更加实时的了解系统的资源占用情况。需要实时监控系统的 CPU 使用率和内存使用率,并在使用率超过设定阈值时输出相应的警告信息。

二、分析

       查看cpu的占用率,可以使用top命令;查看内存的占有率,可以使用free命令。然后结合一些其他bash命令,可以实现查看系统的 CPU 使用率和内存使用率。

三、脚本

直接输出脚本如下:

 

#!/bin/bash

# 设置阈值(百分比)
CPU_THRESHOLD=80
MEMORY_THRESHOLD=8

# 监控间隔(秒)
INTERVAL=5

while true; do
    # 获取CPU使用率(取1秒内的平均值)
    CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
    CPU_USAGE=${CPU_USAGE%.*}  # 取整

    # 获取内存使用率
    # MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
   MEMORY_USAGE=$(free | grep 内存 | awk '{print $3/$2 * 100.0}')
    MEMORY_USAGE=${MEMORY_USAGE%.*}  # 取整

    # 获取当前时间
    TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")

    # 检查CPU使用率
    if [ $CPU_USAGE -gt $CPU_THRESHOLD ]; then
        echo "[$TIMESTAMP] 警告: CPU使用率过高! $CPU_USAGE% (阈值: $CPU_THRESHOLD%)"
    fi

    # 检查内存使用率
    if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; then
        echo "[$TIMESTAMP] 警告: 内存使用率过高! $MEMORY_USAGE% (阈值: $MEMORY_THRESHOLD%)"
    fi

    sleep $INTERVAL
done

四、脚本解释

下面逐部分解释这个Bash脚本的功能和工作原理:

 1. 初始设置部分

#!/bin/bash

# 设置阈值(百分比)

CPU_THRESHOLD=80

MEMORY_THRESHOLD=80

# 监控间隔(秒)

INTERVAL=5

- #!/bin/bash:指定使用Bash解释器执行脚本

- CPU_THRESHOLD=80:设置CPU使用率告警阈值为80%

- MEMORY_THRESHOLD=80:设置内存使用率告警阈值为80%

- INTERVAL=5:设置监控间隔时间为5秒

 2. 主循环结构

while true; do

    # 监控代码...

    sleep $INTERVAL

done

- 这是一个无限循环,会持续监控系统资源

- 每次循环结束后休眠5秒(由INTERVAL变量控制)

 3. CPU使用率获取

(1)代码

CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')

CPU_USAGE=${CPU_USAGE%.*}

(2)工作原理:

1. top -bn1:以批处理模式运行top命令,只输出一次结果

2. grep "Cpu(s)":筛选出CPU使用情况的行

3. sed "s/.*, *\([0-9.]*\)%* id.*/\1/":

   - 提取"id"(空闲CPU百分比)前的数字

   - 例如从 "Cpu(s): 20.3%us, 10.1%sy, 0.0%ni, 69.6%id" 中提取69.6

4. awk '{print 100 - $1}':计算CPU使用率(100% - 空闲百分比)

5. ${CPU_USAGE%.*}:去掉小数部分,只保留整数

 4. 内存使用率获取

(1)代码

MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

MEMORY_USAGE=${MEMORY_USAGE%.*}

(2)工作原理:

1. free:显示内存使用情况

2. grep Mem:筛选出内存信息的行

3. awk '{print $3/$2 * 100.0}':

   - $3是已用内存,$2是总内存

   - 计算已用内存占总内存的百分比

4. ${MEMORY_USAGE%.*}:去掉小数部分,只保留整数

 5. 时间戳获取

TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")

- 获取当前时间并格式化为 YYYY-MM-DD HH:MM:SS 的形式

 6. 阈值检查与告警

if [ $CPU_USAGE -gt $CPU_THRESHOLD ]; then

    echo "[$TIMESTAMP] 警告: CPU使用率过高! $CPU_USAGE% (阈值: $CPU_THRESHOLD%)"

fi

if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; then

    echo "[$TIMESTAMP] 警告: 内存使用率过高! $MEMORY_USAGE% (阈值: $MEMORY_THRESHOLD%)"

fi

- 比较当前使用率与预设阈值

- 如果超过阈值,输出带有时间戳的警告信息

 7. 休眠间隔

sleep $INTERVAL

- 每次循环结束后暂停5秒(由INTERVAL变量控制)

8、脚本整体工作流程

(1) 设置监控参数(阈值和间隔)

(2)进入无限监控循环:

   - 获取当前CPU和内存使用率

   - 获取当前时间戳

   - 检查使用率是否超过阈值

   - 如果超过则打印警告

   - 休眠指定间隔时间

(3)重复上述监控过程

五、脚本执行

1、赋予执行权限

先保存文件为occuppy-value1.sh

然后在命令行输入如下命令:

chmod +x occuppy-value1.sh

实际操作如下:

2、执行

在命令行输入如下命令:

./ occuppy-value1.sh

实际操作如下:

这里为了使结果能够呈现,把内存的告警阀值设置为8%,可以根据需要改成自己需要的数值。

比如,把cpu阀值设置为2,结果显示如下:

这个脚本适合在Linux服务器上运行,可以实时监控系统资源使用情况,并在资源紧张时发出警告,帮助管理员及时发现潜在问题。


        文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


更多推荐