linux脚本:检测系统主要资源(cpu和内存占有率),若超过阀值给予警示
目录
一、背景
为了更加实时的了解系统的资源占用情况。需要实时监控系统的 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 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。
更多推荐


所有评论(0)