压测cpu使用率太高_压测cpu使用率高怎么解决

压测cpu使用率太高_压测cpu使用率高怎么解决做性能压测时,CPU使用率过高怎么确定问题?CPU使用率如何计算的CPU使用率是单位时间内CPU使用情况的统计,以百分比的方式展示,而其中有一个重要的点是单位时间,那么在CPU中时间是怎么计算的呢?Linux是一个多任务操作系统,将

做性能压测时,CPU使用率过高怎么确定问题?
  CPU使用率如何计算的

  CPU使用率是单位时间内CPU使用情况的统计,以百分比的方式展示,而其中有一个重要的点是单位时间,那么在CPU中时间是怎么计算的呢?

  Linux是一个多任务操作系统,将每个CPU时间划分为很短的时间片,然后通过调度器分配给各个任务使用,因此造成多任务同时运行的错觉,为了维护CPU时间,Linux通过事先定义的节拍率(内核中表示为HZ),触发时间中断,并且使用全局变量Jiffies记录开机以来的节拍数,每发生一次时间中断,Jiffies的值就加1。节拍率HZ是内核的可以配置的选项,可以设置为100、250、1000等,不同的系统有不同的数值,可以通过如下选项来查看配置值

  而用户空间程序,内核还提供了一个用户空间节拍率USER_HZ,它总是固定值为100,也就是每秒触发100次时间中断,这样用户空间程序并不需要内核中HZ被设置为了多少,因为它总是固定值USER_HZ

  Linux可以通过/proc虚拟文件系统到系统内部状态的一些信息,而/proc/stat提供的就是系统的CPU和任务统计信息,例如

  通过man /proc可以查看到每一列所表示的具体含义

  image-20211201093651599

  第一列表示CPU的编号,没有编号表示所有CPU的累加,其他列表示不同场景下CPU的累加节拍数,单位是USER_HZ,也就是10ms(1/100),其实就是不同场景下的CPU时间,然后其他列表示的是不同的各个场景

user(us),代表用户态CPU时间
nice(ni),代表低优先级用户态时间
system(sys),代表内核态CPU时间
idle(id),代表空闲时间,注意不包括等待IO时间
iowait(wa),表示等待IO的CPU时间
irq(hi),代表处理硬中断的CPU时间
softirq(si),代表处理软中断的CPU时间
steal(st),代表当系统运行在虚拟机的时候,被其他虚拟机占用的CPU时间
guest(guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间
guest_nice(gnice),代表以低优先级运行虚拟机的时间

  所以CPU的使用率,就是除空闲时间外的其他时间占总CPU时间的百分比:

  那么我们根据/proc/stat中的数据可以轻而易举的计算出CPU的使用率,但是这个数据基本是无效的,因为/proc/stat中统计的是自开机以来的CPU时间,参考价值并不是很大。所以为了计算CPU使用率,一些性能工具例如top、ps一般都会间隔一段时间去计算这段时间内的平均CPU使用率。同样的在/proc/[pid]/stat中同样统计好了每个进程的运行情况的统计信息

  上面介绍了一些CPU使用率的计算方法,但是我们并不需要自己去进行计算,因为各种各样的性能分析工具已经帮我们计算好了,但是需要注意的是每个工具所选取的时间间隔可能并不一样所以计算出来的CPU使用率也会有差距

  查看CPU使用率

  top和ps是最常用的性能分析工具:

top显示了系统总体的CPU和内存使用情况,以及各个进程的资源使用情况
ps则只显示了每个进程的资源使用情况

  image-20211201101126310

  上面截图是top显示后的数据,第三行便是显示的CPU使用率,具体每一列的数据在上面都有提到过,只不过这个时候的数据是使用率,top是默认3秒刷新一次,按下数字1可以切换到每个CPU的使用率,空白行后面是进程的实时信息,每一个进程都有一个%CPU列,表示进程的CPU使用率,它是用户态和内核态CPU使用率的总和,包括进程用户空间使用的CPU,通过系统调用执行的内核空间CPU,以及在就绪队列等待运行的CPU

  top并没有细分进程的用户态CPU和内核态CPU,要想看到进程的详细情况,可以使用pidstat,这是一个专门分析每个进程CPU使用情况的工具,图中表示每隔1秒输出一组数据,共输出5组

  image-20211201102317176

  CPU使用率过高怎么办

  通过top、ps、pidstat可以很简单的分析出哪个CPU的使用率占用比较高,但是接下来应该怎么做呢?或许你会回答直接kill掉,这是不治本的因为当下次启动的时候,这个进程还是会占用比较高的CPU。当某个应用出现CPU使用率比较高的时候,我们应该很想知道是代码中的哪一个函数,找出这个函数我们可以进一步分析问题所在

  一种比较常见的工具是perf top,类似于top,能够实时显示占用CPU时钟最多的函数或者指令,因此可以用来查找热点函数,例如执行

  注意在普通用户下,是不被允许访问内核的热点数据的所以加上sudo,否则会报出错误

  image-20211201104240816

  输出结果中,第一行包含三个数据,分别是采样数Samples、事件类型event、事件总数量Event count,第一列的数据表示该符号的性能时间在所有采样中的比例

  另外一种做大是perf record和perf report,perf top的缺点是不能保存数据,也就是无法用于离线或者后续的分析,perf record提供了保存数据的功能,保存后的数据用perf report解析展示

  案列

  下面就以Nginx + PHP的Web服务为案列,来实现当CPU使用率过高的问题后,怎么通过这些工具找出异常的进程,然后利用perf找出引发性能问题的函数

  环境准备

  Ubuntu 20.2 2cpu 4G内存 两台虚拟机,其中一台做web服务器,另外一台做客户端,这里php+nginx的环境就不在过多描述,搭建web服务器访问如下代码页面index.php

  在客户端机器上访问,可以访问到正常工作的Web服务器

  使用ab工具并发10个请求。总共测试100个请求来测试Nginx的性能

  image-20211201135223281

  可以发现Nginx能承受的每秒平均请求只有39.16这对nginx这种高性能的web服务器来说是很低的,其实我们看到源码的话也会很清除的发现代码中的一个耗时的地方,那么我们现在就是通过工具区定位出那个函数比较耗时

  持续增大压力,方便测试

  使用top命令查看,发现确实是php程序比较耗时,几个pph-fpm进程CPU使用率加起来解决200%,而且us的值也到达94.2

  image-20211201135549965

  接着使用perf top -g -p [进程id]

  image-20211201135807478

  其实到这已经发现了,就是zif_sqrt函数与add_function,这里的函数名也许会和我们在index.php总定义的不一样,因为可能是php内部编译的时候对函数的名字做了改变,但是也能大致的猜测到

  现在我们将那几行测试的代码删除,重新使用ab工具进行测试

  发现目前的每秒平均请求数已经到了1180了

  image-20211201140157487

  CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查性能问题时,通常会的第一个指标。所以我们更要熟悉它的含义,尤其要弄清楚用户(킂、Nice(%nice)、系统(%system) 、等待 I/O(%iowait) 、中断(%irq)以及软中断(%softirq)这几种不同 CPU 的使用率。比如说:

用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题
系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题
I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题
软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序

  碰到 CPU 使用率升高的问题,你可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数

激活谷谷主为您准备了激活教程,为节约您的时间请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/97009.html

(0)
上一篇 2024年 5月 21日
下一篇 2024年 5月 21日

相关推荐

  • 单片机c语言是什么_单片机c语言是什么意思

    单片机c语言是什么_单片机c语言是什么意思单片机c语言编程是什么单片机C语言编程是使用C语言进行单片机开发的一种方式。C语言是一种高级编程语言,广泛应用于嵌入式系统开发中,包括单片机。单片机C语言编程主要涉及使用C语言编写单片机的应用程序,通过编译器将C语言源代码编译成单片机芯片可以执行的二进制机器代码,然后将生成的机器代码

    2024年 5月 27日
  • 星座排盘在线查询免费软件

    星座排盘在线查询免费软件#头条创作挑战赛#移动互联网促使我们很多原始的生活方式变成线上化,记得小时候家里还有那种挂墙式的日历本,过一天撕一页,每一页上会有年份和节气,还有星座运势和小故事。现在,我们已经可以很便捷的通过智能手机中的APP了解日期、节气和每日星座运势。数源:艾瑞因为APP同质化严重

    激活谷笔记 2024年 5月 18日
  • forward redirect区别

    forward redirect区别forward 直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。redirect间接转发方式(Redirect)实际是两次HTT

    激活谷笔记 2024年 5月 18日
  • 金山词霸2019版本

    金山词霸2019版本1. 工具简介金山词霸是一款经典、权威、免费的词典软件,完整收录柯林斯高阶英汉词典;整合500多万双语及权威例句,141本专业版权词典;并与CRI合力打造32万纯正真人语音。同时支持中文与英语、法语、韩语、日语、西班牙语、德语六种语言互译。采用更年轻、时尚的UI设计风格,界面简洁清新,

    激活谷笔记 2024年 5月 20日
  • oracle 函数返回类型

    oracle 函数返回类型数据库使用不同的类型来定义字段的作用1,更快速的处理数据,例如数字类型的加减乘除,而字符类型则无意义2,还是为了快,内部函数的使用,例如字符的截取substr(),日期函数的计算last_day()常用的字段类型:char(),varchar2(),number(),date()

    激活谷笔记 2024年 5月 19日
  • uniapp和Android studio区别_androidstudio屡次停止运行

    uniapp和Android studio区别_androidstudio屡次停止运行记一次uni-app Android原生插件开发背景项目使用到了RFID射频手持设备(PDA),用于读取羊只耳标功能。原来有写过一个插件https://ext.dcloud.net.cn/plugin?id=5246之前没有记录,这次重新记录下过程

    2024年 5月 10日
  • 数组指针和指针数组的定义_数组指针和指针数组的定义和区别

    数组指针和指针数组的定义_数组指针和指针数组的定义和区别2022年河北专接本考试大纲-理工类-计算机科学与技术、软件工程、数字媒体技术、网络工程、物联网工程、数据科学与大数据技术、智能科学与技术专业考试说明(C语言程序设计、微机原理与接口含汇编语言)本文中为2021年河北专接本考试大纲,选自官方发布!河北省普通高校专科接本科教育考

    2024年 5月 28日
  • 镜片cms60

    镜片cms60电子后视镜是由摄像机与监视器组成的系统,在规定视野内需要看清车辆后方、侧方视野,是一种新型的间接视野装置,又称“摄像机-监视器系统(camera-monitor system)”,简称CMS。CMS分为电子内后视镜和电子外后视镜,电子内后视镜

    激活谷笔记 2024年 5月 19日
  • ubuntu默认账号密码_ubuntu初次启动密码

    ubuntu默认账号密码_ubuntu初次启动密码Ubuntu Manpage:useraddProvided by: passwd_4.2-3.1ubuntu5.4_amd64 名称 useradd – 创建一个新用户或更新默认新用户信息大纲

    2024年 5月 14日
  • 单片机c语言和软件c语言有哪些区别_单片机和c语言的区别

    单片机c语言和软件c语言有哪些区别_单片机和c语言的区别单片机汇编语言和c语言的区别有哪些?单片机从诞生到现在,经过了将近70年的发展。众所周知,单片机是可以通过编写程序实现产品的功能,这么多年来,单片机的规格并没有多大变化,而单片机编程一般使用的都是汇编语

    2024年 5月 26日
  • ubuntu20安装输入法_ubuntu20安装输入法后黑屏

    ubuntu20安装输入法_ubuntu20安装输入法后黑屏ubuntu 20.04安装后遇到的问题及解决办法记录(时间不一致、黑屏、点软件图标卡死)前言实验室新购了一批电脑,安装了ubuntu20.04与windows11双系统。在我使用的时候发现了一些问题。windows时间显示不对,比正常时间慢了8个小时,我知道这是安装ubuntu的常见问题;

    2024年 5月 31日
  • cve-2020-14750复现

    cve-2020-14750复现举无遗策,防微虑远。在目前的高级威胁中,攻击者常常使用合法的管理工具来建立入侵系统的通道,并利用内存映射和缓存来绕过常见的安全检测工具。这些逃避技术正在迅速变化,攻击者会精心选择更有价值的企业系统并窃取最敏感的数据。安芯网盾

    激活谷笔记 2024年 5月 19日
关注微信