您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Shell如何实现监控CPU脚本
## 引言
在Linux系统管理中,实时监控CPU使用率是保障系统稳定性的重要手段。通过编写Shell脚本,我们可以灵活地定制监控方案,本文将详细介绍如何用Shell实现CPU监控脚本,涵盖原理分析、脚本实现、进阶优化及实际应用场景。
---
## 一、监控CPU的核心命令
### 1. `top`命令
```bash
top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1
-bn1
:非交互模式且只运行一次vmstat
命令vmstat 1 2 | tail -1 | awk '{print 100 - $15}'
1 2
表示采样间隔1秒,共2次/proc/stat
文件awk '/cpu /{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}' /proc/stat
(user+nice + system) / (user+nice+system+idle)
#!/bin/bash
# 文件名:cpu_monitor.sh
INTERVAL=5 # 监控间隔(秒)
THRESHOLD=80 # 告警阈值(%)
while true; do
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$timestamp] CPU使用率: ${cpu_usage}%"
if (( $(echo "$cpu_usage > $THRESHOLD" | bc -l) )); then
echo "警告!CPU使用率超过阈值" >&2
# 可添加邮件/钉钉告警逻辑
fi
sleep $INTERVAL
done
#!/bin/bash
avg_load=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1)
cores=$(nproc)
threshold=$(echo "$cores * 0.7" | bc)
if (( $(echo "$avg_load > $threshold" | bc -l) )); then
echo "高负载警告!当前平均负载: $avg_load"
fi
#!/bin/bash
# 获取每个核心的使用率
grep -E '^cpu[0-9]' /proc/stat | while read line; do
core=$(echo $line | awk '{print $1}')
usage=$(echo $line | awk '{total=$2+$3+$4; idle=$5}
END {print (total-idle)/total*100}')
echo "核心 ${core}: ${usage}%"
done
# 追加记录到日志文件
log_file="/var/log/cpu_monitor.log"
echo "$(date),${cpu_usage}%" >> $log_file
# 配合crontab每小时记录
0 * * * * /path/to/cpu_monitor.sh >> /var/log/cpu_monitor.log
#!/bin/bash
# 使用gnuplot生成图表
echo "set terminal png
set output 'cpu_report.png'
set xlabel '时间'
set ylabel '使用率(%)'
plot '/var/log/cpu_monitor.log' using 2 with lines" | gnuplot
check_cpu() {
local usage=$(...获取CPU使用率的命令...)
if [[ -z "$usage" ]]; then
echo "获取CPU数据失败" >&2
exit 1
fi
if ! [[ "$usage" =~ ^[0-9.]+$ ]]; then
echo "数据格式异常" >&2
exit 1
fi
return $usage
}
read</proc/stat
替代awk
command=$(vmstat 1 2)
nice -n 19 ./script.sh
# 在Docker中需要访问host的procfs
docker run -v /proc:/host/proc --privileged monitoring_script
自动化扩缩容:结合K8s HPA自动调整Pod数量
if [ $cpu_usage -gt 90 ]; then
kubectl scale deployment --replicas=5 my-app
fi
定时任务调度:在低负载时段执行批处理作业
if [ $cpu_usage -lt 30 ]; then
/opt/scripts/batch_job.sh
fi
安全审计:检测挖矿病毒异常CPU占用
if [ $cpu_usage -gt 90 ] && [ ! -f "/tmp/legit_process.lock" ]; then
alert_security_team
fi
通过Shell脚本实现CPU监控,不仅能够快速响应系统异常,还能根据业务需求灵活扩展。建议结合具体场景选择监控方案,并定期优化脚本性能。最终实现的脚本可集成到Zabbix、Prometheus等监控系统中,形成完整的监控体系。
完整代码库参考:https://github.com/example/cpu-monitoring-scripts “`
注:本文实际约1100字,包含20个代码示例/片段,采用Markdown语法实现标题分级、代码块、强调等格式。内容涵盖从基础到进阶的完整实现方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。