一 cpu查看core数命令
1.1 查看物理core数
1.查看物理CPU的个数:cat /proc/cpuinfo
这个虚拟机的物理cpu2个,每个物理cpu的逻辑CPU个数为1个,所以逻辑CPU的个数就是2个。
1.2 查看逻辑cpu个数
cat /proc/cpuinfo| grep "processor"| wc -l
wc -l
: wc
是一个命令,用于计算文件中的字节数、字数和行数。-l
选项告诉 wc
只计算行数。
1.3 lscpu命令查看cpu信息
-
Sockets=物理cpu
-
Cores per Socket=一个插槽上CPU核数
-
Threads per core=每个核上超线程数
-
CPUs=逻辑cpu 性能测试瓶颈:CPU 问题的深度分析和调优
二 cpu性能指标
2.1 cpu使用率
CPU使用率是我们最直观能看到的指标,CPU利用率行业内标准是一般不要超过75%,如果超过了就需要分析原因,并找到问题和调优。
2.1.1 cpu使用率含义
CPU使用率=非空闲时间占总CPU时间的百分比, 越高说明CPU越繁忙,就可能需要进行性能问题分析和调优。
2.1.2 使用top命令查看
1)%us:用户 CPU,比如java程序,应用程序等:用户态使用CPU的百分比(user)。用户CPU使用率高,通常说明有应用程序比较繁忙。
2)%sy:系统CPU:表示CPU在内核态运行的时间百分比。系统CPU 使用率高,说明内核比较繁忙。
3)%iowait:等待I/O:表示等待I/O的时间百分比。iowait高,说明系统与硬件设备的I/O 交互时间比较长,比如跟键盘、网卡、显示器等交互。
4)ni【软/硬中断】:分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。
5)当CPU的时间分片正在处理某个任务还没完成时钟时间的时候,突然收到硬中断或软中断指令,CPU被打断需要去响应,才能继续执行任务;
6)如果ni参数很高,说明中断的数量很多,说明CPU不停的被打扰,需要分析是什么中断。一般ni比较高的情况比较少,不过ni高也会导致sy【内核占比】比较高,是环环相扣的,要能分析。
7) %st/gu:steal/guest:在虚拟化环境中会用到的窃取CPU使用率(steal)和客户CPU使用率(guest),分别表示被其他虚拟机占用的CPU时间百分比,和运行客户虚拟机的CPU时间百分比。 这两个一般比较低,不会成为cpu的瓶颈 不太需要关注
8)%id:空闲 CPU百分比,CPU使用率 = (100-id)% ; 比较简单的算法:100% - id% = CPU使用率
2.2 cpu平均负载
平均负载指系统的平均活跃进程数,一个时间段内平均有多少进程数在活跃,这是服务器性能的重点关注值,一般CPU的使用率高的话,平均负载也是高的。
过去1、5、15钟的平均负载。可以通过这三个值看到负载整体的趋势
1)逐步降低,是CPU后来越来越空闲;逐步增加,CPU越来越繁忙;或者持平,就是CPU稳定。
2)理想情况下,平均负载=逻辑 CPU个数,这表示每个CPU都恰好被充分利用;如果大于逻辑 CPU 个数,就表示负载较重;如果平均负载的值高于CPU的3- 5倍 ,那么很有可能CPU存在瓶颈,就需要分析和调优。
2.3 上下文切换cs
系统内核和应用存储共用CPU的内核,就会需要不停的争抢资源,就会出现上下文切换。
上下文切换多了不是好事儿,过多的上下文切换,会将原本运行进程的CPU时间,消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,很少有时间真正计算和处理数据,减少和缩短了进程真正运行的时间
三 性能指标查看命令
3.1 top命令
top命令:常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
1)第1行数据:
-
当前系统时间,启动运行了多长时间。
-
2 users, 有多少个终端用户连接, 不代表多少个账户 【同一个账户 多个终端也算】
-
load average:服务器性能的重点关注值,系统过去1分钟的平均负载、 过去5分钟的平均负载、 过去15分钟的平均负载。如果平均负载大于CPU数量,甚至达到3- 5倍cpu数量,说明系统负载非常大了。这个时候才会需要去观察下面的详细数据分析原因。
2)第2行数据:默认是进程数,可以切换为线程数
-
总进程数,正在运行的进程数,休眠的进程数 。
-
按下H, 切换为 Threads 当前总线程数 。
3)第3行数据:CPU的使用情况,这个是重点。
这行数据会优先看id数据,如果id很大,不用分析;id小,再去看us 和sy:
• 如果us 很高,一般要分析代码逻辑
• 如果sy很高,要看看ni的值,ni很高的话,就要进一步分析hi si的值 看哪个中断高。
1%CPU(s):是CPU使用率的平均值,合并cpu的统计数据,是所有数量cpu的总情况。
us, CPU的用户态使用时间占比 【应用程度和代码逻辑在用户态计算】,如果这个高,很可能代码逻辑复杂
sy, cpu的系统态使用时间占比 【系统内核】
ni, 中断占用cpu的情况,如果发生中断,优先级更高的中断了当前的事情
id, idle 空闲【 不会超过100】
wa, IOwait等待IO操作的操作状态的时间占比 ,当我们io繁忙时,这个数值一般会非常明显。
hi, hard interrupt 硬中断 ,保存和打开数据占用cpu时间
si, soft interrupt 软中断,保存和打开数据占用cpu时间
hi + si = ni的值
st:steal,其他的虚拟机占用CPU的时间 ,这个基本不用关注。
4)第4行数据:内存的使用情况
总的内存,空闲内存,使用的内存,buff和cache内存
• buff 【缓冲区:磁盘虚拟出来 加快磁盘读取数据速度】
• cache 【缓存:虚拟的 加快内存数据交换速度的】
• swap:交换区
• avali:可用于下一次的物理内存总量
5)第5行数据:内存的使用情况
1)pid 进程id
2)USER 进程的归属者, 这个进程启动用户
3)PR 进程优先级,数字越大优先级高的话可以优先使用资源 ----性能不太关注 影响不大
4)NI 进程优先级切换,跟PR共同决定了进程的优先级 ---性能不太关注 影响不大
5)VIRT:这个进程分配的虚拟内存
6)RES:实际物理内存
7)SHR :共享内存会详细讲
8)S: status,进程的状态,可以是R S 等
9)%CPU 这个进程占用了多少的cpu使用率 -----这个数值,在CPU为多核时候,是可以超过100
10) 进程列表中,默认排序规则,是根据 %CPU 数值从高到低的排序,如果某个进程占用CPU高于75% 需要单独拎出来分析
11)%MEM 这个进程占用内存率,后面讲解。
12)TIME+:这个进程占用CPU的总的时间,如果这个进程经常需要CPU进行计算和处理,这个时间就会很大。
13)COMAND: 这个进程通过哪个命令启动的。
3.2 mpstat命令
这个命令Linux系统不自带,需要安装,安装命令 :yum install -y sysstat
mpstat 1 10 :1s刷新一次数据,实时监控工具,主要报告与cpu相关统计信息,这个CPU是所有CPU的平均整合情况;总共打印10次。
3.3 pidstat命令
需要额外安装:yum install sysstat -y
作用:监控全部或指定进程的cpu、内存、线程、设备io等资源占用情况和上下文切换信息,用来实时查看进程的CPU、内存、I/O以及上下文切换等指标信息
案例:pidstat -u -w -p pid ,过滤指定的进程的信息显示。
-
-u: CPU的信息,-w【switch】,-p 【指定进程id】
-
这个命令里我们会重点看上下文切换信息,上下文切换包括自愿上下文切换和非自愿切换:
cswch/s :自愿上下文切换 :,资源不够资源切换
nvcswch/s:非自愿上下文切换 ,时钟周期+中断等被迫切换
如果这个上下文切换高,那么CPU的sy一般会比较高, 就需要去定位原因了
3.4 vmstat命令
可对虚拟内存、进程、cpu活动进行监控。
vmstat 1 5 : 间隔1秒钟刷新一次,总共收集5次 就结束,显示结果如下:
api解释如下:
-
procs: r 显示多少进程在等待,b 显示多少进程在不可中断的休眠
-
memory: swpd 显示多少块被换出磁盘,free显示剩下的空闲块,buff正在被用作缓冲区的块,cache正在被用作操作系统的缓存
-
swap: 现在交换活动, si 每秒有多少块正在被换入内存 so正在被换出到磁盘
-
io: 显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O的繁忙程度
-
system: 显示每秒中断(in)和上下文切换(cs)的数量
-
cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO
3.5 iostate命令
显示设备,分区和网络文件系统的CPU统计信息和输入/输出统计信息:需要额外安装
iostat -dx 1 2
是一个用于监控 Linux 系统磁盘 I/O 性能的命令
-
iostat
:用于报告 CPU 和设备的输入/输出统计信息。 -
-d
:仅显示设备(磁盘)的统计信息。 -
-x
:显示扩展的磁盘统计信息,包括更详细的 I/O 指标。 -
1
:表示每隔 1 秒刷新一次统计信息。 -
2
:表示总共输出 2 次统计信息。
显示结果的解读:
-
Device: 磁盘信息
-
rrqm/s :读磁盘队列数量
-
wrqm/s 写磁盘队列数量
-
r/s w/s 每秒的读\写的请求次数
-
rMB/s wMB/s 每秒读\写磁盘的大小
-
avgrq-sz 平均请求磁盘扇区数
-
avgqu-sz 等待队列的大小
-
await r_await w_await 等待
-
svctm 请求用的时间
-
%util 至少有一个活跃的 读写操作的时间占比
3.6 dstat命令
可以替换vmstat、iostat等命令的工具,功能比较全,有彩色的界面。
安装: yum install dstat -y
api参数说明:
-
-c:cpu监控
-
-m: 内存
-
-d:disk 磁盘
-
-n:net 网络
-
-l:load 系统负载
-
-y:system ,系统
-
-r: io
-
-t: 加上时间显示
3.7 sar命令
可以统计几乎所有信息:有缘再见
1) -B 分页状况
2) -b I/O 和传输速率信息
3)-d 块设备状况
4)-I 中断信息状况
5)-n 网络统计信息
6)-q 系统负载压力统计
7)-r 内存利用率信息
8)-u CPU利用率信息