使用PerfMon、top命令或云监控实时查看CPU使用率,结合Prometheus+Grafana实现历史分析及告警
监控服务器CPU使用率的实现方法与工具
常用监控工具对比
工具名称 | 适用系统 | 特点 | 官网/来源 |
---|---|---|---|
top/htop | Linux/Unix | 实时查看进程CPU占用,支持交互式操作(htop更直观) | 内置命令 |
vmstat | Linux/Unix | 提供CPU、内存、IO等系统整体状态,适合短期性能分析 | 内置命令 |
Zabbix | Linux/Windows | 开源监控平台,支持CPU利用率采集、历史数据存储、告警规则配置 | Zabbix.com |
Prometheus | Linux/Windows | 时序数据库,结合Node Exporter可监控CPU使用率,支持告警与可视化 | Prometheus.io |
PerfMon | Windows | 系统自带性能监视工具,可实时查看CPU使用率及进程明细 | Windows性能监视器 |
CloudWatch | AWS云服务器 | 集成监控服务,支持自定义CPU阈值告警,无需部署额外工具 | AWS CloudWatch |
Linux系统监控实践
-
基础命令监控
top
:按CPU排序查看进程,1
键可显示每个CPU核心的使用率mpstat -P ALL 1
:每秒输出各CPU核心的利用率(%usr、%sys、%idle)sar -u 1 3
:每1秒采样一次,连续3次记录CPU空闲率
-
安装Prometheus监控体系
# 安装Node Exporter(用于暴露系统指标) wget https://github.com/prometheus/node_exporter/releases/latest/node_exporter-.tar.gz tar -xz && cd node_exporter- ./node_exporter --web.listen-address=:9100 & # 配置Prometheus抓取指标 scrape_configs: job_name: 'node-exporter' static_configs: targets: ['localhost:9100']
-
设置CPU使用率告警
在Prometheus中创建告警规则:groups: name: cpu_alerts rules: alert: HighCPUUsage expr: 100 (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) 100) > 80 for: 2m labels: severity: warning
Windows系统监控方案
-
性能监视器(PerfMon)
- 添加计数器:
Processor(_Total)% Processor Time
- 设置数据采样间隔为1秒,保存为.blg日志文件
- 添加计数器:
-
PowerShell脚本监控
$cpu = (Get-Counter "Processor(_Total)% Processor Time").NextValue().CounterValue if ($cpu -gt 80) { Send-MailMessage -From "monitor@company.com" -To "admin@company.com" ` -Subject "CPU Alert" -Body "CPU usage is $cpu%" -SmtpServer smtp.company.com }
-
任务计划程序
- 每分钟执行脚本
CheckCPU.ps1
- 触发条件:CPU > 90%持续5分钟
- 每分钟执行脚本
数据分析与优化建议
场景 | 特征 | 优化方向 |
---|---|---|
CPU长期高位 | 某个进程持续占用80%+ | 代码优化/负载均衡/扩容 |
突发性峰值 | 定时任务或批量操作引发 | 错峰执行/限制并发数 |
空闲率波动 | %idle频繁低于20% | 检查病毒挖矿程序/驱动兼容性问题 |
相关问题与解答
Q1:如何区分CPU密集型瓶颈和IO等待型瓶颈?
A1:
- 使用
pidstat
命令观察进程的%cpu
和%wait
字段:- CPU密集型:
%cpu
接近100%,%wait
接近0 - IO等待型:
%wait
显著升高(如磁盘IO导致wa
列升高)
- CPU密集型:
- 结合
iostat
查看磁盘IO等待时间(%util
接近100%表示IO瓶颈)
Q2:如何监控多核CPU中单个核心的利用率?
A2:
- Linux:使用
mpstat -P <核心号>
(如mpstat -P 0
监控第一个核心) - Windows:在性能监视器中添加
Processor(0)% Processor Time
(数字对应核心编号) - Prometheus:通过
node_cpu_seconds_total{core=0,mode="idle"}
查询特定
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/74108.html