下面分Linux(最常用)、Windows,从命令行实时查看、持久化监控、告警、CPU 指标解读,适合运维 / 开发日常排查和线上监控。
一、Linux 服务器 CPU 监控
1. 即时查看(内置命令,无需安装)
top
top
按
1:展开多核 CPU,看每个核心占用字段含义:
us:用户态 CPU(应用程序,Java/Go 等)sy:内核态 CPU(系统调用、磁盘网络)id:空闲 CPU,id + us + sy ≈100%wa:IO 等待(重点!CPU 空闲但在等磁盘,不是 CPU 瓶颈)hi:硬中断;si:软中断
按
P:按 CPU 占用排序;q退出
htop(美化版 top,需要安装)
# Debian/Ubuntu
apt install htop
# CentOS/RHEL
yum install htop
彩色界面,鼠标操作,多核一目了然。
uptime
快速看负载(1/5/15 分钟平均负载)
uptime
# 例:load average: 2.3, 1.8, 1.5
负载解读:CPU 核数 N,负载接近 N 表示 CPU 打满;大于 N 代表进程排队等待 CPU。 ⚠️ 负载高 ≠ CPU 使用率高,wa 高也会拉高负载。
mpstat(看多核 CPU 细分统计)
# 每2秒输出一次,持续输出
mpstat -P ALL 2
适合定位是不是单个核心跑满(单核瓶颈)。
pidstat(看单个进程 CPU)
# 每2秒输出进程CPU
pidstat -u 2
2. 持久化采集(保存历史数据,推荐生产)
sar(系统自带,历史回放)
# 每2秒采集一次,采集5次
sar -u 2 5
# 查看历史sar日志(一般在 /var/log/sa/)
sar -u -f /var/log/sa/sa20
注意:部分系统默认没开启 sar 日志,需要安装
sysstat并配置开机自启。
主流监控套件(生产环境)
Prometheus + Grafana + node-exporter(最流行) node-exporter 采集服务器 CPU、负载、中断等指标,Prometheus 存储,Grafana 出大盘,配置告警。 核心指标:
node_cpu_seconds_total:CPU 各模式时间,用来计算使用率node_load1/node_load5/node_load15:系统负载
Zabbix:传统运维监控,开箱自带 CPU 模板、邮件 / 钉钉告警
Netdata:轻量,网页实时大盘,一键安装,适合快速临时监控
二、Windows 服务器 CPU 监控
1. 图形界面
任务管理器
Ctrl+Shift+Esc→ 性能 → CPU,可展开逻辑核心资源监视器(resmon):看进程 + 线程 CPU 占用
性能监视器
perfmon.msc:可添加计数器,记录日志做历史分析
2. 命令行
# 查看CPU使用率
Get-Counter '\Processor(_Total)\% Processor Time'
# 查看进程CPU
Get-Process | Sort-Object CPU -Descending | Select-Object Name,Id,CPU
三、关键 CPU 指标判断标准
重点区分:
us 高:业务代码消耗 CPU(代码循环、序列化、计算密集)
sy 高:频繁系统调用、大量小 IO、锁竞争
wa 高:磁盘慢,CPU 没事干在等 IO,不要升级 CPU
四、排查 CPU 高的标准流程(Linux)
top看全局:us/sy/wa,确认是 CPU 还是 IO 问题看负载,
mpstat -P ALL判断是否单核打满top按 P 排序,找到占用高 PIDpidstat -t -p <pid>看进程内线程 CPUJava:
jstack <pid>查看线程栈;Go:pprof查看中断:
cat /proc/interrupts,确认是否软中断暴涨
五、告警配置建议(Prometheus 示例告警规则思路)
CPU 使用率持续 5 分钟 > 85%
15 分钟负载 > 逻辑 CPU 核数
CPU 空闲持续低于 10%
六、容器环境补充(Docker/K8s)
容器内 top 看到的是宿主机 CPU,需要用容器工具:
# docker
docker stats
# k8s
kubectl top nodes
kubectl top pods
Prometheus 使用 cadvisor 采集容器 CPU 限制、使用率。
本文原创作者:易君召,详见:https://www.yijunzhao.cc/about,转载请注明出处。
原文链接
欢迎访问