CPU相关概念:
- 处理器:物理芯片,一个或者多个
- 核数:一个物理芯片上实现多个CPU功能,又称为芯片级多处理(chip-levelmultiprocessing,CMP)
- 线程数:利用单个CPU中断间隙实现多线程,提升CPU效率,也就是我们说的开超线程(1*2)
- 指令:一些列的命令,告诉CPU需要做什么操作,比如资源I/O、算术、逻辑控制。
- 中断:中断是系统实现CPU能合理的服务计算机的资源,由于CPU中断和执行的快速,我们才能感觉到电脑上的程序都是同时运行的。
- 硬中断:由硬件设备引发的中断,跟操作系统没关系
- 软中断:由系统引发的中断
- 参考:
性能指标:基础
- 负载(饱和度):反应CPU的繁忙程度,占用CPU时间线程数和等待CPU时间线程数计算得出,负载为1,说明CPU已经饱和运转(单核)
- 使用率:CPU一段时间内的忙于执行的时间,百分比表示
- 用户时间/内核时间:
- 用户时间:CPU用户执行用户态的代码时间
- 内核时间:CPU用户执行内核态的代码时间
- 计算密集性体现在用户态占用一般用户/内核时间之比接近99/1,I/O密集型体现系统调用频率较高,可能是用户/内核时间之比接近70/30
- 进程/线程
- 进程是系统资源分配最小的单元
- 线程是代码执行的最小单元
性能工具使用
uptime
平均负载,后面的3个数值分别是1分、5分钟、15分钟的平均负载
值的意义,平均负载大于CPU 数量表示CPU 不足以服务线程,有些线程在等待
判断方向:
- CPU饱和度影响性能
备注:Linux 目前把在不可中断状态执行磁盘I/O 的任务也计入了平均负载,所以还需要借助vmstat和mpstat提供一些数据观察
vmstat
vmstat从整体上查看资源情况,进程、内存、交换分区、I/O、系统、CPU
r:可运行进程的数量(正在运行或等待运行时)
b:等待 I/O 完成的阻塞进程数
CPU:CPU总时间的百分比
us:用户态的时间
sy:内核态的时间
id:闲置时间
wa:等待I/O 时间,即线程被阻塞等待磁盘I/O 时的CPU 空闲时间
判断方向:
- 是否进程数太多,导致性能问题
- CPU的性能是单个导致还是整个(%usr + %sys)
- CPU密集类型(计算或I/O)
参考:https://www.man7.org/linux/man-pages/man8/vmstat.8.html
mpstat
查看单个CPU的详细情况(-P ALL用来打印每个CPU 的报告)
CPU:逻辑CPU ID,或者all 表示总结信息。
● %usr:用户态时间
● %nice:以nice 优先级运行的进程用户态时间
● %sys:系统态时间(内核)
● %iowai:I/O 等待
● %irq:硬件中断CPU 用量
● %soft:软件中断CPU 用量
● %steal:耗费在服务其他租户的时间
● %guest:花在访客虚拟机的时间
● %idle:空闲
重要指标:%usr、%sys、%iowai、%irq、%soft、%idle
判断方向:
- CPU的性能是单个导致还是整个(%usr + %sys)
- CPU密集类型(计算或I/O)
- CPU中断导致的性能问题
ps
用于查看进程资源使用情况
● %CPU:进程使用CPU资源总和,一个CPU显示100%
● %MEM:进程使用的总内存资源比例
● TIME:进程消耗CPU总时长
● VSZ:进程申请的内存(kb),并不是真正使用这么多
● RSS:进程固定使用的内存(kb)
● TTY:进程在哪个终端运行
Stat状态:
S 可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
R 运行,严格来说,应是“可运行”,即在运行队列中,处于正在执行或即将运行状态
D 不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
T (terminate)停止。通常是被shell作业控制所停止,或者进程正处于调试器的控制之下
Z (zombie)僵尸进程,通常是该进程已经死亡,但父进程没有调用wait类函数来释放该进程的资源
N (nice)低优先级任务
s 进程是会话期首进程
+ 进程属于前台进程组
l 进程是多线程的
< 高优先级任务
top
以上工具的各种资源集合
top进去后,按1 可以查看到单个CPU的资源
第一行:负载(uptime类似)
第二行:进程(ps类似)
第三行:CPU信息(hi硬中断,si软中断)
第四行:内存信息
第五行:交换分区信息
第六行:系统进程信息(
VIRT:申请内存,RES:使用内存,S:状态,SHR:共享内存(kb),
NI 是优先值,是用户层面的概念, PR是进程的实际优先级, 是给内核(kernel)看(用)的,一般情况下,PR=NI+20, 如果一个进程的优先级PR是20, 那么它的NI(nice)值就是20-20=0,可以通过改变NI来改变PR: PRI(new) = PRI(old) + nice)
pidstat
查看进程的CPU、内存、线程、设备IO资源占用情况
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号(ALL 所有)
-t 显示选择任务的线程的统计信息外的额外信息
使用技巧:
- watch -n 1 -d “vmstat 1 1 | column -t” #可以实时看到变换和显示平整的数据
- ps aux | sort -k 3 -r | head #查看进程使用CPU资源的前10
- time ls #real:CPU执行总时间 user和sys(用户态和内核态)
参考书籍:性能之巅:洞悉系统、企业与云计算