监控CPU使用率
原创
©著作权归作者所有:来自51CTO博客作者wx661e39b4ae194的原创作品,请联系作者获取转载授权,否则将追究法律责任
#!/usr/bin/env bash
# 设置告警阈值 默认80%
threshold=${1:-80}
while true
do
check_time=$(date '+%Y-%m-%d %H.%M.%S')
cpu_usage=$(top -bn 1 | awk '/%Cpu\(s\)/{printf "%.0f", $2+$4}')
if [ "${cpu_usage}" -gt "${threshold}" ]; then
echo "${check_time} cpu usage: ${cpu_usage}%"
fi
sleep 5
done
- 设置告警阈值:
- 脚本首先定义了一个变量
threshold
,用于存储CPU使用率的告警阈值。默认情况下,如果用户没有提供命令行参数,阈值将设置为 80
%。若用户在运行脚本时传入一个整数作为参数(例如:./script.sh 90
),则阈值将使用该参数值(例如:90
%)。
- 无限循环:
- 使用
while true
创建一个无限循环,使脚本持续运行并定期检查CPU使用率。
- 获取当前时间和CPU使用率:
- 使用
date
命令获取当前时间,并以 '%Y-%m-%d %H.%M.%S'
格式赋值给 check_time
变量。 - 使用
top
命令(配合 -bn 1
参数以非交互模式输出一次统计信息)结合 awk
命令提取总的CPU使用率(用户+系统),并赋值给 cpu_usage
变量。具体来说:
top -bn 1
输出一次系统的实时资源使用情况。awk '/%Cpu\(s\)/{printf "%.0f", $2+$4}'
从 top
的输出中找到包含 %Cpu(s)
的行(即CPU使用率总览行),计算第2个字段(用户CPU使用率)与第4个字段(系统CPU使用率)之和,并将结果四舍五入至整数,以百分比形式输出。
- 判断与告警:
- 使用条件判断语句
[ "${cpu_usage}" -gt "${threshold}" ]
检查当前CPU使用率是否超过设定的阈值。如果是:
- 使用
echo
命令输出告警信息,内容包括当前时间(check_time
)和超过阈值的CPU使用率(cpu_usage
)。
- 休眠:
- 在每次循环结束时,使用
sleep 5
命令让脚本暂停执行5秒钟。这使得脚本每隔5秒检查一次CPU使用率,避免过于频繁地检查和输出。