在Linux系统中,CPU使用率是衡量系统性能的关键指标之一,它直接反映了CPU资源的使用情况,无论是系统管理员还是开发者,掌握准确获取CPU使用率的方法对于性能监控、问题排查和系统优化都具有重要意义,本文将详细介绍Linux系统中获取CPU使用率的多种方式,包括通过/proc文件系统、top命令、vmstat工具、sar工具以及Python脚本等,并分析各种方法的适用场景和优缺点。

通过/proc/stat文件获取原始数据
Linux内核提供了/proc虚拟文件系统,其中包含了系统运行时的实时信息。/proc/stat文件是获取CPU使用率最原始的数据来源,它记录了CPU的各种时间统计,通过解析该文件,可以精确计算CPU的使用率。
打开/proc/stat文件,可以看到类似如下的内容:
cpu 12345 678 9012 345678 1234 567 89 0 0
cpu0 1234 56 789 34567 123 45 6 0 0
cpu1 2345 67 890 67890 234 56 7 0 0
其中第一行的”cpu”表示所有CPU的总体统计,后续的”cpu0″、”cpu1″等分别表示每个CPU核心的统计,各字段依次为:用户态时间(nice)、低优先级用户态时间(system)、空闲时间(idle)、I/O等待时间(iowait)、硬件中断时间(irq)、软件中断时间(softirq)、虚拟化时间(steal)、虚拟机管理时间(guest)、虚拟机管理运行时间(guest_nice)。
要计算CPU使用率,需要采集两个时间点的数据并计算差值,具体步骤如下:
- 读取/proc/stat文件中”cpu”行的所有字段值,记为t1_user、t1_nice、t1_system、t1_idle等。
- 等待一段时间(如1秒)。
- 再次读取/proc/stat文件,记为t2_user、t2_nice等。
- 计算每个时间段的差值:delta_user = t2_user – t1_user,delta_nice、delta_system等同理。
- 计算总时间:total = delta_user + delta_nice + delta_system + delta_idle + delta_iowait + delta_irq + delta_softirq。
- 计算CPU使用率:CPU使用率 = (total – delta_idle) / total * 100%。
需要注意的是,I/O等待时间(iowait)通常不计入CPU使用率,因为此时CPU处于空闲状态,正在等待I/O操作完成。
使用top命令实时监控CPU使用率
top命令是Linux系统中常用的动态监控工具,可以实时显示系统中各个进程的资源占用情况,包括CPU使用率,通过top命令,可以直观地查看整体CPU使用率和单个进程的CPU占用。
执行top命令后,默认界面会显示以下信息:
- 第一行:系统时间、运行时长、登录用户数、系统负载(1分钟、5分钟、15分钟)。
- 第二行:进程总数、运行进程数、睡眠进程数、僵尸进程数。
- 第三行:CPU状态,分别显示用户态、低优先级用户态、系统态、空闲、I/O等待、硬件中断、软件中断等时间的百分比。
在top界面中,按”P”键可以按CPU使用率降序排列进程,方便找到占用CPU资源最多的进程,top命令还支持多种交互操作,如按”k”键终止进程,按”1″键显示每个CPU核心的使用率等。

top命令的优点是操作简单、信息直观,适合实时监控,缺点是更新频率固定(默认每3秒更新一次),且在高负载情况下可能会对系统性能产生轻微影响。
vmstat命令查看CPU活动统计
vmstat(Virtual Memory Statistics)是另一个常用的系统监控工具,可以显示进程、内存、分页、块IO、陷阱、CPU等活动信息,通过vmstat命令,可以快速了解CPU的整体负载情况。
执行vmstat 1命令(每秒更新一次)后,输出结果中的”us”、”sy”、”id”、”wa”等列分别表示用户态时间、系统态时间、空闲时间、I/O等待时间的百分比。
procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 123456 78901 234567 0 0 10 20 1000 2000 15 10 70 5 0
us”列表示用户态CPU使用率,”sy”列表示系统态CPU使用率,”id”列表示CPU空闲率,”wa”列表示I/O等待率。
vmstat命令的优点是资源占用低,适合在低配置服务器上使用,缺点是它只提供CPU时间的汇总统计,无法查看单个进程的CPU使用情况。
sar命令历史数据分析
sar(System Activity Reporter)是sysstat软件包的一部分,可以收集、保存和报告系统的历史活动数据,通过sar命令,可以查看过去某个时间段的CPU使用率,便于进行性能趋势分析。
要使用sar命令,需要先安装sysstat软件包(如yum install sysstat或apt-get install sysstat),安装后,sar命令会自动收集系统数据并保存到/var/log/sa/目录下。
查看当天的CPU使用率,可以执行sar -u 1 10命令(每秒采集一次,共采集10次),或执行sar -u -s 00:00:00 -e 23:59:59查看全天的CPU使用情况,sar命令的输出会显示用户态、系统态、空闲、I/O等待等时间的百分比,并给出平均值。

sar命令的优点是可以查看历史数据,便于长期性能分析,缺点是需要额外安装sysstat软件包,且默认可能没有启用数据收集功能。
Python脚本实现CPU使用率计算
对于需要自动化监控或集成到其他应用中的场景,可以使用Python脚本获取CPU使用率,Python的psutil库提供了丰富的系统监控接口,可以方便地获取CPU使用率。
首先需要安装psutil库:pip install psutil,以下是一个简单的Python脚本示例:
import psutil
import time
def get_cpu_usage():
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU使用率: {cpu_percent}%")
if __name__ == "__main__":
while True:
get_cpu_usage()
time.sleep(1)
psutil.cpu_percent(interval=1)函数会返回所有CPU核心的平均使用率,interval参数表示采样时间(秒),如果要获取每个CPU核心的使用率,可以使用psutil.cpu_percent(percpu=True)。
Python脚本的优点是灵活性强,可以方便地集成到监控系统中,并实现复杂的逻辑处理,缺点是需要安装额外的Python库,且对脚本的编写有一定要求。
Linux获取CPU使用率的方法多种多样,每种方法都有其适用场景。/proc/stat文件提供了最原始的数据,适合需要精确计算的场景;top命令适合实时监控和快速排查问题;vmstat命令适合轻量级系统监控;sar命令适合历史数据分析;Python脚本适合自动化监控和系统集成,根据实际需求选择合适的方法,可以更高效地管理和优化Linux系统性能。

















