系统性能出了问题,你第一时间会用什么工具?top 虽然经典,但信息维度有限。本文介绍三款更强大的全局监控工具 ——Glances、dstat、pidstat,帮你一屏掌握 CPU、内存、磁盘、网络、进程的全貌,快速定位性能瓶颈。一、Glances —— 跨平台全能监控仪表盘
Glances 是一款基于 Python(psutil 库)的跨平台命令行系统监控工具,能在一个终端界面中实时展示几乎所有系统关键指标:
CPU 使用率与负载
内存与 Swap 使用情况
磁盘 I/O 速率与文件系统空间
网络 I/O 收发速率
消耗资源最多的进程
内核统计与运行队列
Glances 每 2 秒自动刷新,且自身 CPU 消耗通常低于 2%。
1.1 安装
# CentOS / RHELyum install epel* -yyum install python-pip python-devel -yyum install glances -y# Ubuntu / Debianapt install glances# macOSbrew install glances# 通用 pip 安装(推荐,获取最新版)pip install glances
可选扩展:
# Web 页面监控(通过浏览器远程查看)pip install bottle# 硬件温度监控pip install pysensorsyum -y install lm_sensors # CentOS
1.2 参数速查
| 参数 | 作用 |
|---|
-t <秒> | 设置刷新间隔(默认 2 秒) |
-s | 以服务器模式运行 |
-B <IP> | 绑定服务器端 IP |
-c <IP> | 连接远程 Glances 服务器 |
-p <端口> | 设置端口(默认 61209) |
-P <密码> | 设置连接密码 |
-b | 网络速度以 Byte/s 显示 |
-e | 显示传感器温度 |
-d | 关闭磁盘 I/O 模块 |
-m | 关闭挂载磁盘模块 |
-n | 关闭网络模块 |
-f <文件> | 输出到文件(HTML/CSV) |
-C <文件> | 指定配置文件 |
-w | 以 Web 模式运行(浏览器访问) |
1.3 颜色告警机制
Glances 用四种颜色直观标识系统状态:
| 颜色 | 状态 | 默认阈值 |
|---|
| 绿色 | OK,正常 | < 50% |
| 蓝色 | CAREFUL,需关注 | 50% ~ 70% |
| 紫色 | WARNING,警告 | 70% ~ 90% |
| 红色 | CRITICAL,严重 | > 90% |
阈值可在配置文件 /etc/glances/glances.conf 中自定义。
1.4 输出字段说明
上半部分 —— 系统概览:
| 区域 | 内容 |
|---|
| CPU | 用户态、系统态、空闲、等待 I/O 等占比 |
| Load | 1/5/15 分钟平均负载 |
| Mem | 内存总量、已用、缓存、可用 |
| Swap | 交换空间使用情况 |
下半部分 —— 进程列表字段:
| 字段 | 含义 |
|---|
| VIRT | 虚拟内存大小 |
| RES | 常驻物理内存 |
| %CPU | CPU 使用率 |
| %MEM | 内存使用率 |
| PID | 进程 ID |
| USER | 进程所有者 |
| TIME+ | 累计 CPU 时间 |
| IO_R / IO_W | 读/写 I/O 速率 |
| NI | 优先级(Nice 值) |
| S | 状态(S=睡眠, R=运行, Z=僵尸) |
| NAME | 进程名称 |
1.5 实战命令
# 基本使用,2 秒刷新glances -t 2# 以 Web 模式运行(浏览器访问 http://<IP>:61208)glances -w# 输出为 HTML 格式yum -y install python-jinja2glances -o HTML -f /var/www/html# 输出为 CSV 格式(便于后续分析)glances -o CSV -f /tmp/glances.csv# 服务器/客户端模式(远程监控)# 服务端glances -s -B 192.168.1.100# 客户端glances -c 192.168.1.100
1.6 Glances 交互快捷键(补充)
| 快捷键 | 功能 |
|---|
a | 自动排序进程 |
c | 按 CPU 排序 |
m | 按内存排序 |
i | 按 I/O 排序 |
p | 按进程名排序 |
d | 显示/隐藏磁盘 I/O |
n | 显示/隐藏网络 |
s | 显示/隐藏传感器 |
f | 显示/隐藏文件系统 |
1 | 切换 CPU 聚合/逐核显示 |
h | 帮助 |
q | 退出 |
二、dstat —— 万能统计替代者
dstat 是一款用来替代 vmstat、iostat、netstat、nfsstat、ifstat 的全能系统信息统计工具。它的优势在于:
默认行为: 直接运行 dstat 等同于 dstat -cdngy,每秒输出一行 CPU、磁盘、网络、页面、系统信息。
dstat # 每秒一行dstat 5# 每 5 秒一行dstat 5 10# 每 5 秒一行,共 10 行
2.1 安装
# CentOS / RHELyum install dstat -y# Ubuntu / Debian(dstat 已更名为 dool)apt install dstat # 旧版本apt install dool # 新版本(Ubuntu 22.04+)# macOSbrew install dstat
2.2 参数分类详解
CPU 相关
| 参数 | 说明 |
|---|
-c | CPU 状态:usr(用户)、sys(系统)、idl(空闲)、wai(等待)、hiq(硬中断)、siq(软中断) |
-C 0,3,total | 配合 -c 使用,指定显示第 0、3 颗 CPU 及总体 |
-l | 1/5/15 分钟平均负载 |
--snooze | CPU 时钟频率 |
进程相关
| 参数 | 说明 |
|---|
-p | 进程状态:可运行态、不可中断睡眠态、新进程数 |
--proc-count | 当前进程总数量 |
-y | 系统中断次数(int)和上下文切换次数(csw) |
-i | 中断状态 |
-I 32,35 | 配合 -i 指定设备号查看中断 |
--ipc | IPC 状态:消息队列、信号量、共享内存 |
排查思路:-p 中就绪态进程多表示 CPU 负载高(配合 -l 确认);等待态进程多表示 I/O 可能有问题(配合 -c 的 wai 列、-d 的磁盘 I/O、-g 的换页情况综合判断)。
进程资源消耗 TOP 排行
| 参数 | 说明 |
|---|
--top-cpu | 最耗 CPU 的进程名和占比 |
--top-cpu-adv | 最耗 CPU 的进程名、PID、占比和读写信息 |
--top-cputime | 累计 CPU 时间最多的进程 |
--top-cputime-avg | 平均 CPU 时间最多的进程 |
--top-latency | 延迟最高的进程 |
--top-latencyavg | 平均延迟最高的进程 |
--top-bio | 最耗块 I/O 的进程(磁盘 I/O) |
--top-bio-adv | 最耗块 I/O 的进程详细信息 |
--top-io | 最耗总 I/O 的进程(含磁盘+内存+网络) |
--top-io-adv | 最耗总 I/O 的进程详细信息 |
--top-mem | 最耗内存的进程 |
--top-oom | 最可能被 OOM Killer 杀死的进程 |
--top-childwait | 等待子进程最多的父进程 |
注意:--top-io 统计的是全部 I/O(含块 I/O、内存、网络),如果要定位磁盘读写大户,应使用 --top-bio。
内存相关
| 参数 | 说明 |
|---|
-m | 内存状态:used、buffers、cache、free |
--vm | 虚拟内存:majpf(硬缺页)、minpf(软缺页)、alloc、free |
换页空间相关
| 参数 | 说明 |
|---|
-g | 换页活动:in(换入)、out(换出);频繁换入换出才说明内存不足 |
-s | 交换空间使用量(有使用不代表内存不足,需配合 -g 判断) |
-S swap1,total | 配合 -s 指定具体 swap 设备 |
网络相关
| 参数 | 说明 |
|---|
-n | 网络总收发速率 |
-N eth0,total | 配合 -n 指定网卡 |
--netpackets | 收发包数量 |
--socket | 套接字状态:tot、tcp、udp、raw、frg |
--tcp | TCP 连接状态:listen、established、syn、time_wait、close |
--udp | UDP 连接状态:listen、active |
--unix | Unix 域套接字状态 |
磁盘与文件系统
| 参数 | 说明 |
|---|
-d | 磁盘 I/O 读写速率 |
-D sda,total | 配合 -d 指定磁盘设备 |
--freespace | 各文件系统使用情况 |
--fs | 打开文件数和 inode 使用数 |
--lock | 文件锁状态:posix、flock、读锁、写锁 |
硬件与虚拟化
| 参数 | 说明 |
|---|
--battery | 电池电量(需 ACPI) |
--cpufreq | CPU 频率(需 ACPI) |
--thermal | 硬件温度(需 ACPI) |
--fan | 风扇速度(需 ACPI) |
--vm-memctl | VMware 内存气球状态 |
--vmk-hba/int/nic | VMware ESX 内核统计 |
--vz-cpu/io/ubc | OpenVZ 虚拟机统计 |
dstat 自身消耗监控
| 参数 | 说明 |
|---|
--dstat | dstat 的 CPU 时间消耗和延迟 |
--dstat-cpu | dstat 详细 CPU 使用 |
--dstat-ctxt | dstat 上下文切换 |
--dstat-mem | dstat 内存使用 |
2.3 实战命令组合
# 综合概览(CPU + 磁盘 + 网络 + 内存 + 系统)dstat -cdnmsy# 找出 CPU 和 I/O 大户dstat -c --top-cpu --top-bio 5# 监控网络连接状态变化dstat -n --tcp--socket 3# 全面排查:CPU + 负载 + 内存 + 进程状态 + 中断dstat -clmpyi 5# 内存瓶颈排查:内存 + 换页 + Swap + 虚拟内存dstat -mgsr --vm# 输出到 CSV 文件做后续分析dstat -cdnmsy --output /tmp/dstat_report.csv 560# 定位最耗资源进程(综合)dstat --top-cpu --top-mem --top-bio --top-io
三、pidstat —— 进程级精准定位
pidstat 是 sysstat 套件的成员,专门用于监控单个进程的 CPU、内存、I/O、上下文切换等指标。与 dstat/glances 的系统全局视角不同,pidstat 能精确到进程甚至线程级别,是定位具体问题进程的利器。
3.1 安装
# CentOS / RHELyum install sysstat -y# Ubuntu / Debianapt install sysstat
3.2 基本语法
pidstat [选项] [间隔秒数] [采集次数]
3.3 参数说明
| 参数 | 说明 |
|---|
-u | CPU 使用统计(默认) |
-r | 内存使用统计 |
-d | I/O 使用统计 |
-w | 上下文切换统计 |
-t | 显示线程级统计 |
-p <PID> | 指定进程(ALL 表示全部) |
-T { TASK \| CHILD \| ALL } | TASK=独立任务, CHILD=子线程, ALL=全部 |
-l | 显示完整命令行 |
-I | CPU 使用率除以核心数(SMP 环境) |
-h | 单行输出,便于程序解析 |
3.4 输出字段详解
CPU 统计(-u,默认)
| 字段 | 含义 |
|---|
| UID | 用户 ID |
| PID | 进程 ID |
| %usr | 用户态 CPU 占比 |
| %system | 内核态 CPU 占比 |
| %guest | 虚拟机 CPU 占比 |
| %CPU | 总 CPU 使用率 |
| CPU | 运行该任务的处理器编号 |
| Command | 命令名称 |
内存统计(-r)
| 字段 | 含义 |
|---|
| minflt/s | 每秒次要缺页错误数(不需要磁盘 I/O) |
| majflt/s | 每秒主要缺页错误数(需要磁盘加载) |
| VSZ | 虚拟内存大小(KB) |
| RSS | 常驻物理内存(KB) |
| %MEM | 物理内存使用百分比 |
补充:majflt/s 持续偏高通常意味着内存不足,系统频繁从磁盘换入页面,会显著拖慢性能。
I/O 统计(-d)
| 字段 | 含义 |
|---|
| kB_rd/s | 每秒读取 KB 数 |
| kB_wr/s | 每秒写入 KB 数 |
| kB_ccwr/s | 每秒取消写入 KB 数(写缓存取消) |
| iodelay | I/O 延迟(时钟周期) |
上下文切换统计(-w,补充)
| 字段 | 含义 |
|---|
| cswch/s | 每秒自愿上下文切换次数(进程主动让出 CPU,如等待 I/O) |
| nvcswch/s | 每秒非自愿上下文切换次数(时间片用尽被调度器强制切换) |
补充: 非自愿切换(nvcswch/s)频繁通常说明 CPU 竞争激烈;自愿切换(cswch/s)频繁说明进程经常等待 I/O 或锁。
3.5 实战命令
# 查看所有进程的 CPU 使用率pidstat -u# 查看指定进程的 CPU、内存、I/O(每 3 秒一次,共 2 次)pidstat -urd -h -p 10370 3 2# 每秒输出 5 次指定进程的 I/O 统计pidstat -d -p 10370 1 5# 查看进程的线程级统计pidstat -t -p 10370# 查看所有进程的上下文切换情况pidstat -w 1 5# 查看指定进程的内存统计(每 2 秒一次)pidstat -r -p 10370 2# 全面监控:CPU + 内存 + I/O + 上下文切换pidstat -urdw -p 10370 1 10
四、实战场景:三工具协同排查(补充)
场景 1:系统变慢,不知道瓶颈在哪
第一步:Glances 全局扫描
glances
观察 CPU、内存、磁盘 I/O、网络哪个指标异常(红色/紫色区域)。
第二步:dstat 定位资源大户
# 根据 Glances 发现的瓶颈方向选择参数dstat -c --top-cpu --top-bio 3# CPU 或 I/O 瓶颈dstat -m --top-mem 3# 内存瓶颈dstat -n --top-io 3# 网络瓶颈
第三步:pidstat 精确定位
# 拿到可疑进程 PID 后,深入分析pidstat -urdw -p <PID> 1 10
场景 2:判断内存是否真的不足
# Step 1: 查看 swap 使用(有使用不代表不足)dstat -s# Step 2: 查看换页活动(频繁换入换出才是真的不足)dstat -g -s 3# Step 3: 查看哪个进程在频繁缺页pidstat -r 1 5# 关注 majflt/s 列,持续大于 0 说明该进程触发了磁盘换页
场景 3:I/O 等待高,定位磁盘 I/O 来源
# Step 1: 确认 I/O 等待dstat -c# 关注 wai 列# Step 2: 找出 I/O 大户dstat --top-bio-adv 3# Step 3: 精确分析该进程的 I/O 模式pidstat -d -p <PID> 1 10
五、三大工具对比总结
| 维度 | Glances | dstat | pidstat |
|---|
| 定位 | 全局仪表盘 | 多维度实时统计 | 进程级精准监控 |
| 监控粒度 | 系统级 | 系统级 | 进程/线程级 |
| 输出方式 | 交互式 TUI / Web | 流式文本 | 流式文本 |
| 数据导出 | CSV / HTML / API | CSV | 文本 |
| 远程监控 | 支持(C/S 模式 + Web) | 不支持 | 不支持 |
| 适用场景 | 日常巡检、远程监控 | 性能趋势分析、多维关联 | 定位具体问题进程 |
| 安装 | pip / 包管理器 | 包管理器 | sysstat 套件 |
六、延伸工具推荐(补充)
| 工具 | 特点 |
|---|
| nmon | IBM 出品,适合长时间采集性能数据并生成报告 |
| atop | 带历史回放功能,可追溯过去某时刻的系统状态 |
| sar | sysstat 套件,按时间段统计历史性能数据 |
| vmstat | 经典虚拟内存统计,dstat 的前身 |
| iostat | 专注磁盘 I/O 统计,dstat 的磁盘部分更为详细 |
| bpftop / bcc-tools | 基于 eBPF 的现代性能分析工具集,功能强大 |
| Prometheus + Grafana | 生产环境标配的监控告警方案,适合集群级监控 |
Glances 看全貌,dstat 挖趋势,pidstat 定元凶 —— 三者配合使用,形成从"发现问题"到"定位根因"的完整排查链路。建议在日常运维中多加练习,逐步形成自己的性能分析方法论。