|
CPU相关概念:
- 处理器:物理芯片,一个或者多个
- 核数:一个物理芯片上实现多个CPU功能,又称为芯片级多处理(chip-levelmultiprocessing,CMP)
- 线程数:利用单个CPU中断间隙实现多线程,提升CPU效率,也就是我们说的开超线程(1*2)
- 指令:一些列的命令,告诉CPU需要做什么操作,比如资源I/O、算术、逻辑控制。
- 中断:中断是系统实现CPU能合理的服务计算机的资源,由于CPU中断和执行的快速,我们才能感觉到电脑上的程序都是同时运行的。
- 硬中断:由硬件设备引发的中断,跟操作系统没关系
- 软中断:由系统引发的中断
- 参考:https://blog.csdn.net/yue530tomtom/article/details/76095739
性能指标:基础
- 负载(饱和度):反应CPU的繁忙程度,占用CPU时间线程数和等待CPU时间线程数计算得出,负载为1,说明CPU已经饱和运转(单核)
- 使用率:CPU一段时间内的忙于执行的时间,百分比表示
- 用户时间/内核时间:
- 用户时间:CPU用户执行用户态的代码时间
- 内核时间:CPU用户执行内核态的代码时间
- 计算密集性体现在用户态占用一般用户/内核时间之比接近99/1,I/O密集型体现系统调用频率较高,可能是用户/内核时间之比接近70/30
- 进程/线程
- 进程是系统资源分配最小的单元
- 线程是代码执行的最小单元
性能工具使用 
uptime 
平均负载,后面的3个数值分别是1分、5分钟、15分钟的平均负载 值的意义,平均负载大于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 进程是多线程的 < 高优先级任务
参考:https://linuxconfig.org/ps-output-difference-between-vsz-vs-rss-memory-usage
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(用户态和内核态)
参考书籍:性能之巅:洞悉系统、企业与云计算
|