性能测试瓶颈:CPU 问题的深度分析和调优


我们做性能测试的时候,除了使用工具编写脚本并执行之外,最核心的工作就是做性能测试结果分析和问题调优。然后在做性能测试的时候,非常常见的一类问题就是CPU的问题。所以,要专业做性能测试就免不了要深入学习一下CPU的原理和常见的分析和监控的命令。


CPU的介绍

概念:CPU(中央处理器:Central Processing Unit)),是一块超大规模的集成电路,是计算机的运算核心【拿到数据后先计算】和控制核心【然后再根据计算结果去控制】。

图片

功能:主要是解释计算机指令以及处理计算机软件中的数据。电脑中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。

  • 计算机程序编译后 0101二进制代码,CPU接受到这个指令,解释指令拿到数据,处理数据。

CPU由3个模块组成,三个部分由内部总线连接起来:

  • 控制单元:根据计算结果去控制数据的流向,把内存的指令、数据读入寄存器,控制计算机

  • 运算单元:拿到数据先计算数据

  • 存储单元:临时的数据存储在存储单元,比磁和-内存更小,速度更快。

CPU的信息查看命令

我们搭建好性能测试环境后,进行性能测试之前,最好能先去看一下服务器CPU的基本信息和参数。所以,我们先来学习几个CPU查看的命令。

1、查看物理CPU的个数:
cat /proc/cpuinfo

图片

通过上图:这个虚拟机的物理cpu2个,每个物理cpu的逻辑CPU个数为1个,所以逻辑CPU的个数就是2个。

2、也可以直接用命令:
cat /proc/cpuinfo| grep "processor"| wc -l 
查看逻辑CPU的个数。

  • wc -lwc 是一个命令,用于计算文件中的字节数、字数和行数。-l 选项告诉 wc 只计算行数。

图片

3、通过lscpu命令查看:显示CPU制造商、架构、CPU数量、型号、主频以及缓存等信息。

  • Sockets=物理cpu

  • Cores per Socket=一个插槽上CPU核数

  • Threads per core=每个核上超线程数

  • CPUs=逻辑cpu

图片

CPU关注性能指标

我们真正需要重点学习的是CPU在性能测试的时候,我们分析应该关注哪些指标。这个是性能分析的关键。如下图所示:

图片

关注指标1:CPU使用率

CPU使用率是我们最直观能看到的指标,所以会优先去关注。CPU利用率行业内标准是一般不要超过75%,如果超过了就需要分析原因,并找到问题和调优了。

  • CPU使用率=非空闲时间占总CPU时间的百分比, 越高说明CPU越繁忙,就可能需要进行性能问题分析和调优。

图片

我们需要关注的是CPU非空闲部分,具体可以细分如下,加粗部分是重点: 

  • %us:用户 CPU,比如java程序,应用程序等:用户态使用CPU的百分比(user)。用户CPU使用率高,通常说明有应用程序比较繁忙。

  • %sy:系统CPU:表示CPU在内核态运行的时间百分比。系统CPU 使用率高,说明内核比较繁忙。

  • %iowait:等待I/O:表示等待I/O的时间百分比。iowait高,说明系统与硬件设备的I/O 交互时间比较长,比如跟键盘、网卡、显示器等交互。

  • ni【软/硬中断】:分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。

    • 当CPU的时间分片正在处理某个任务还没完成时钟时间的时候,突然收到硬中断或软中断指令,CPU被打断需要去响应,才能继续执行任务;

    • 如果ni参数很高,说明中断的数量很多,说明CPU不停的被打扰,需要分析是什么中断。一般ni比较高的情况比较少,不过ni高也会导致sy【内核占比】比较高,是环环相扣的,要能分析。

  • %st/gu:steal/guest:在虚拟化环境中会用到的窃取CPU使用率(steal)和客户CPU使用率(guest),分别表示被其他虚拟机占用的CPU时间百分比,和运行客户虚拟机的CPU时间百分比。

    • 这两个一般比较低,不会成为cpu的瓶颈 不太需要关注

  • %id:空闲 CPU百分比,CPU使用率 = (100-id)%

    • 比较简单的算法:100% - id% = CPU使用率

关注指标2:平均负载

平均负载指系统的平均活跃进程数,一个时间段内平均有多少进程数在活跃,跟cpu核数做比较,算出繁忙情况;这是服务器性能的重点关注值,一般CPU的使用率高的话,平均负载也是高的。

主要包括三个数值,过去1、5、15钟的平均负载。可以通过这三个值看到负载整体的趋势。

图片

  • 逐步降低,是CPU后来越来越空闲;逐步增加,CPU越来越繁忙;或者持平,就是CPU稳定。

  • 理想情况下,平均负载=逻辑 CPU个数,这表示每个CPU都恰好被充分利用;如果大于逻辑 CPU 个数,就表示负载较重;如果平均负载的值高于CPU的3- 5倍 ,那么很有可能CPU存在瓶颈,就需要分析和调优。

关注指标3:上下文的切换cs

系统内核和应用存储共用CPU的内核,就会需要不停的争抢资源,就会出现上下文切换。

上下文切换多了不是好事儿,过多的上下文切换,会将原本运行进程的CPU时间,消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,很少有时间真正计算和处理数据,减少和缩短了进程真正运行的时间,通常会导致CPU内核【sy】消耗资源比较高,会成为性能瓶颈,需要优化。

性能的基本Linux命令

了解CPU需要关注的性能指标,那么在性能测试执行的时候,如何去监控这些指标呢?我们就需要通过一些常用的监控命令了。

1、top命令:常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况

图片

上图就是top命令的结果显示,我们来一一分析:

第一行数据:

  • 当前系统时间,启动运行了多长时间。

  • 2 users, 有多少个终端用户连接, 不代表多少个账户 【同一个账户 多个终端也算】

  • load average:服务器性能的重点关注值,系统过去1分钟的平均负载、 过去5分钟的平均负载、 过去15分钟的平均负载

    • 前面我们讲到过,如果平均负载大于CPU数量,甚至达到3- 5倍cpu数量,说明系统负载非常大了。这个时候才会需要去观察下面的详细数据分析原因。

第二行数据:默认是进程数,可以切换为线程数

  • 总进程数,正在运行的进程数,休眠的进程数 。

  • 按下H, 切换为 Threads 当前总线程数 。

第三行数据:CPU的使用情况,这个是重点。
  • %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的时间 ,这个基本不用关注。

  • 总结:这行数据会优先看id数据,如果id很大,不用分析;id小,再去看us 和sy:

    • 如果us 很高,一般要分析代码逻辑

    • 如果sy很高,要看看ni的值,ni很高的话,就要进一步分析hi si的值 看哪个中断高。

 

第四行数据:内存的使用情况,后面我们分析内存性能问题的时候再详细讲。

 

进程列表详细数据:默认都是进程

 

  • pid 进程id

  • USER 进程的归属者, 这个进程启动用户

  • PR 进程优先级,数字越大优先级高的话可以优先使用资源 ----性能不太关注 影响不大

  • NI 进程优先级切换,跟PR共同决定了进程的优先级 ---性能不太关注 影响不大

  • VIRT:这个进程分配的虚拟内存

  • RES:实际物理内存

  • SHR :共享内存会详细讲

  • S: status,进程的状态,可以是R S 等

  • %CPU 这个进程占用了多少的cpu使用率 -----这个数值,在CPU为多核时候,是可以超过100

    • 进程列表中,默认排序规则,是根据 %CPU 数值从高到低的排序

    • 如果某个进程占用CPU高于75% 需要单独拎出来分析

  • %MEM 这个进程占用内存率,后面讲解。

  • TIME+:这个进程占用CPU的总的时间,如果这个进程经常需要CPU进行计算和处理,这个时间就会很大。

  • COMAND: 这个进程通过哪个命令启动的。

 

2、mpstat:进程相关的统计报告信息,跟top命令里信息类似。
  • 这个命令Linux系统不自带,需要安装,安装命令 :yum install -y sysstat

  • 1)mpstat 1 10 :1s刷新一次数据,实时监控工具,主要报告与cpu相关统计信息,这个CPU是所有CPU的平均整合情况;总共打印10次。

图片

结果里显示的信息跟top命令里基本一样,就不详细赘述介绍了。

3、pidstat:监控全部或指定进程的某个进程查看cpu、内存、线程、设备io等资源占用情况和上下文切换信息。重点在于上下文切换。

  • 同样不是系统自带的命令,需要额外安装:

    yum install sysstat -y
  • 监控全部或指定进程的cpu、内存、线程、设备io等资源占用情况和上下文切换信息,用来实时查看进程的CPU、内存、I/O以及上下文切换等指标信息

  • 一般会加一些参数来使用pidstat命令:pidstat -u -w -p pid ,过滤指定的进程的信息显示。

  •     -u: CPU的信息,-w【switch】,-p 【指定进程id】

  •    这个命令里我们会重点看上下文切换信息,上下文切换包括资源上下文切换和非资源切换:

           • cswch/s :自愿上下文切换 :,资源不够资源切换

          • nvcswch/s:非自愿上下文切换 ,时钟周期+中断等被迫切换

  • 如果这个上下文切换高,那么CPU的sy一般会比较高, 就需要去定位原因了。

图片

4、vmstat :虚拟内存统计的缩写,很强大的命令,基本涵盖了所有监控的信息,可对虚拟内存、进程、cpu活动进行监控。

vmstat 1 5 : 间隔1秒钟刷新一次,总共收集5次 就结束,显示结果如下:

图片

  • procs: r 显示多少进程在等待,b 显示多少进程在不可中断的休眠

  • memory: swpd 显示多少块被换出磁盘,free显示剩下的空闲块,buff正在被用作缓冲区的块,cache正在被用作操作系统的缓存

  • swap: 现在交换活动, si 每秒有多少块正在被换入内存 so正在被换出到磁盘

  • io: 显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O的繁忙程度

  • system: 显示每秒中断(in)和上下文切换(cs)的数量

  • cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO

5、iostat 显示设备,分区和网络文件系统的CPU统计信息和输入/输出统计信息 [需要额外安装]

图片

重点的参数

  • -c 显示CPU使用率报告

  • -d 显示设备【磁盘】使用率报告

  • -k 以每秒千字节显示统计报告

  • -m 以每秒兆字节显示统计报告

  • -x 显示扩展统计信息

结果显示:

  • Device: 磁盘信息

  • rrqm/s :读磁盘队列数量

  • wrqm/s 写磁盘队列数量

  • r/s w/s 每秒的读\写的请求次数

  • rMB/s wMB/s 每秒读\写磁盘的大小

  • avgrq-sz 平均请求磁盘扇区数

  • avgqu-sz 等待队列的大小

  • await r_await w_await 等待

  • svctm 请求用的时间

  • %util 至少有一个活跃的 读写操作的时间占比

6、dstat 是一个用来替换vmstat、iostat等命令的工具,功能比较全,有彩色的界面

安装:yum install dstat -y

参数:

  • -c:cpu监控

  • -m: 内存

  • -d:disk 磁盘

  • -n:net 网络

  • -l:load 系统负载

  • -y:system ,系统

  • -r: io

  • -t: 加上时间显示

图片

7、sar:几乎可以统计服务器的所有信息
  • -B 分页状况

  • -b I/O 和传输速率信息

  • -d 块设备状况

  • -I 中断信息状况

  • -n 网络统计信息

  • -q 系统负载压力统计

  • -r 内存利用率信息

  • -u CPU利用率信息

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kswapd1 是 Linux 系统的一个进程,它负责处理和管理内存的页面交换(swapping)工作。当内存不足时,kswapd1 会将部分不常用的页面(页面是内存分配的最小单元)调出到交换分区(swap partition),以释放更多的可用内存。 当 kswapd1 的 CPU 占用率很高时,主要有以下可能原因: 1. 内存压力:当系统内存不足,kswapd1 需要频繁进行页面交换操作,以释放可用内存。这会导致 kswapd1 占用较高的 CPU 资源。可以通过查看系统内存使用情况和交换分区使用情况来确认是否存在内存压力问题。 2. 内存泄漏:系统某个进程可能存在内存泄漏的情况,导致内存不断增加,使得 kswapd1 不断进行页面交换。可以使用系统工具来监测进程的内存使用情况,找出是否存在内存泄漏的进程。 3. 磁盘 I/O 问题:当系统的交换分区位于较慢的磁盘上,或者磁盘本身存在故障,会导致 kswapd1 进程占用较高的 CPU 资源。可以通过检查磁盘状态以及磁盘 I/O 操作来确定是否存在此问题。 为解决 kswapd1 CPU 占用率高的问题,可以尝试以下解决方案: 1. 增加物理内存:如果系统内存不足,可以考虑增加物理内存,以减少对页面交换的需求。 2. 优化内存使用:检查系统的进程,找出可能存在内存泄漏的进程,并进行相应的处理或调优。 3. 优化磁盘性能:如果磁盘 I/O 是导致 kswapd1 CPU 占用率高的原因,可以优化磁盘性能,例如更换较慢的磁盘,修复磁盘故障等。 总体而言,解决 kswapd1 CPU 占用率高的问题需要综合考虑内存状况、进程的内存使用情况以及磁盘性能等因素,找出问题的根本原因,并采取相应的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值