系统响应时间这个指标,最能反映一台服务器的“健康状况”。很多运维同学一遇到响应慢,第一反应就是查CPU,但往往陷入“CPU跑满了”这种粗颗粒度的判断里。其实,有一个工具可以帮你把CPU使用情况拆解得清清楚楚,它就是cpustat——专门为分析系统响应时间而生的监控利器。

安装 cpustat
要使用它,首先得确保系统里装了对应的软件包。其实cpustat是sysstat工具集里的一员,安装方式因发行版而异:
- 如果你是Debian系(比如Ubuntu),直接敲:
sudo apt-get update
sudo apt-get install sysstat
- 如果是Red Hat系(比如CentOS),用yum:
sudo yum install sysstat
装完直接运行cpustat,就能看到CPU的实时快照——用户态、系统态、空闲时间,一目了然。
基本用法
默认情况下,cpustat会输出一个简洁的表格,展示当前CPU各维度的占用百分比。你只需要在终端输入:
cpustat
如果你觉得信息太密集,想让它持续刷新,可以配合-p参数来指定采样间隔和持续时间。比如每2秒采样一次,持续60秒:
cpustat -p 2 60
分析系统响应时间
重点来了。要判断系统响应时间是否正常,别只看一个数字,得盯住几个关键指标:
- %user:用户态CPU占用率。应用程序跑得欢不欢,就看它。
- %system:系统态CPU占用率。内核在处理中断、系统调用时,这个值会高。
- %idle:空闲时间百分比。这个值越低,说明CPU越忙。
- iowait:进程等待I/O完成的时间占比。这个指标特别重要,因为它直接关联磁盘性能。
怎么解读?举个例子:
- 如果
%user和%system都飙得很高,说明CPU正在被密集使用,响应时间大概率会变慢。 - 如果
%idle持续走低,CPU几乎没喘息机会,那响应慢就是CPU瓶在瓶颈。 - 最隐蔽的是
iowait——这个值一旦高了,意味着磁盘I/O在拖后腿。很多应用慢的根源不在CPU,而在磁盘。
使用 -m 选项查看多核CPU的使用情况
现在的服务器基本都是多核CPU,只看整体平均值容易掩盖问题。比如某个核心被占满,其他核心空闲,但平均值可能显示“还好”。这时用-m参数,可以逐个核心查看:
cpustat -m
每个核心的利用率、空闲时间、iowait都会单独列出,哪个核在“偷懒”或“累趴”,一目了然。
结合其他工具
单一工具总有些盲区。cpustat擅长的是CPU层面的精细分析,但如果想全面排查系统响应慢的问题,建议搭配top、htop、vmstat这些老牌工具。比如用vmstat看内存和进程调度,用top看进程级别的资源消耗,把几个工具的输出对照着看,诊断效率会高很多。
示例输出分析
下面是个实际跑出来的例子,命令是cpustat -p 2 60:
Linux 5.4.0-42-generic (hostname) 05/20/2021 _x86_64_(4 CPU)
a vg-cpu: %user %system %idle %iowait %steal %guest %gnice
12.34 23.45 64.21 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s a vgrq-sz a vgqu-sz await svctm %util
sda 0.00 0.00 1.00 0.50 8.00 16.00 16.00 0.00 0.00 0.00 0.10
在这个输出里,%user和%system加起来才35%左右,%idle高达64%,CPU明显不紧张。iowait是0.00,磁盘利用率%util只有0.10%,说明磁盘I/O也毫无压力。综合来看,这台服务器的响应时间应该是正常的。——当然,这只是CPU和磁盘层面的初步判断,如果还有内存或网络瓶颈,需要进一步排查。但至少,cpustat已经帮你排除了CPU和I/O这两个最常出问题的环节。