性能测试基础知识总结

news2024/9/22 11:38:49

1、CPU 使用率

除了空闲时间外的其他时间占总 CPU 时间的百分比,就是CPU 使用率,即 1- 空闲时间/CPU 总时间。

当计算 CPU 使用率时,我们通常使用 /proc/stat 文件中的数据。该文件提供了有关 CPU 的计数器信息,包括各种状态下的节拍数。通过 cat  /proc/stat 命令就可详细查看其信息,其中各

列的含义如下:

  • user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
  • nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
  • system(通常缩写为sys),代表内核态 CPU 时间。
  • idle(通常缩写为id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
  • iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
  • irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
  • softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
  • steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
  • guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
  • guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间。

2、软中断

假设你正在使用一款音乐播放器应用程序,同时还在进行其他任务,如浏览网页。在某个时刻,音乐播放器应用程序需要通知你有一条新的消息到达。然而,应用程序不能直接中断你正在浏览的网页,因为这会干扰你的体验。因此,应用程序使用软中断来通知你。

当新的消息到达时,音乐播放器应用程序触发一个软中断,类似于发送一个"通知"。这个软中断会暂停当前正在执行的任务(浏览网页),然后转移控制权到应用程序内部的中断处理程序。在中断处理程序中,应用程序可以执行特定的操作,比如弹出一个消息通知,显示新消息的内容。

一旦中断处理程序完成执行,控制权将返回给浏览器应用程序,你可以继续浏览网页,并在屏幕上看到新消息的通知。

这个例子中,软中断允许应用程序在后台处理事件,并以非侵入性的方式通知用户。它提供了应用程序与操作系统之间的通信和协调,而无需直接中断正在执行的任务。软中断的关键特点是它由软件触发和处理,而不是由外部设备触发。

在实际的计算机系统中,软中断用于各种目的,如处理网络数据包、处理磁盘操作、定时器事件等。它们提供了一种有效的方式来处理异步事件,同时保持系统的响应性和稳定性。

网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了。这时,内核就应该调用中断处理程序来响应它。网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了。这时,内核就应该调用中断处理程序来响应它。最后再发送一个软中断信号,需要从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析和处理,直到把它送给应用程序。

同时,在这我准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺这份测试文档资料也打包在里面啦,免费领取!

软件测试视频教程观看处:

Jmeter性能测试、接口自动化测试全集!字节大佬分享,永久白嫖!

3、内存映射

在现代操作系统中,包括Linux,内存管理采用了虚拟内存的概念。每个进程都有自己的虚拟地址空间,它是一个抽象的地址空间,与实际的物理内存地址是分离的。虚拟地址是由进程使用的,而不是直接映射到物理内存。

内存映射通过将虚拟内存地址映射到物理内存地址,将虚拟地址空间与物理内存关联起来。这样,进程可以使用虚拟地址来访问内存,而无需关心实际的物理内存位置。

为了实现这种映射,操作系统维护了一个页表,它是一个数据结构,记录了虚拟地址与物理地址之间的映射关系。每个进程都有自己的页表,用于管理它的虚拟地址空间。

当进程访问一个虚拟地址时,操作系统会使用页表查找对应的物理地址。如果存在映射关系,操作系统将虚拟地址转换为对应的物理地址,以便在物理内存中读写数据。如果没有映射关系,则会触发页面错误(page fault),操作系统会根据情况从磁盘中加载数据到物理内存,并更新页表以建立映射关系。

内存映射在文件操作中也使用了类似的机制。当将文件内容映射到进程的地址空间时,操作系统会将文件的内容映射到一段虚拟地址空间,这样进程就可以通过读写这些虚拟地址来实现对文件的访问。

因此,内存映射不仅用于将虚拟内存地址映射到物理内存地址,也用于将文件内容映射到进程的地址空间中。页表是维护这些映射关系的重要数据结构,它记录了虚拟地址与物理地址之间的对应关系。

4、虚拟内存空间分布

代码段(Text Segment):

代码段包含了可执行程序的机器指令。它通常是只读的,因为指令不应该被修改。当程序被加载到内存中时,代码段被映射到进程的虚拟内存空间,以供执行。

数据段(Data Segment):

数据段包含了全局变量和静态变量的内存空间。它通常是可读写的。数据段在程序运行时初始化,并且在整个程序的生命周期中保持不变。

堆(Heap):

堆是动态分配内存的区域。在堆中,程序可以通过调用诸如malloc()和free()等函数来动态地分配和释放内存。堆的大小可以在运行时进行调整。

栈(Stack):

栈用于存储局部变量、函数调用和函数参数。栈是以后进先出(LIFO)的方式进行管理的。每当调用函数时,栈会分配一段内存来存储该函数的局部变量和其他相关信息。当函数返回时,这些内存将被释放。

共享库区域(Shared Library Region):

共享库区域包含了共享库的代码和数据。这些库可以由多个进程共享,以节省内存空间。当多个进程使用相同的共享库时,它们可以将该库映射到自己的虚拟内存空间中,以便共享使用。

内核空间(Kernel Space):

内核空间是由操作系统内核使用的虚拟内存区域。它包含了操作系统内核的代码、数据和驱动程序等。用户进程无法直接访问内核空间,需要通过系统调用等特定接口与内核进行交互。

5、内存分配

内存分配:

  1. 静态分配:静态分配是指在编译时或程序启动时就确定内存的分配情况。例如,全局变量和静态变量的内存分配在程序加载时完成,并在整个程序的生命周期中保持不变。
  2. 动态分配:动态分配是在程序运行时根据需要动态分配和释放内存。常用的动态内存分配函数是malloc()、calloc()和realloc()。这些函数允许你请求一定大小的内存块,并返回一个指向该内存块的指针。动态分配的内存块位于堆(Heap)区域。

内存回收:

  • 回收缓存,比如使用 LRU(Least Recently Used)算法,回收最近使用最少的内存页面;
  • 回收不常访问的内存,把不常用的内存通过交换分区直接写到磁盘中;
  • 杀死进程,内存紧张时系统还会通过 OOM(Out of Memory),直接杀掉占用大量内存的进程。

其中,第二种方式回收不常访问的内存时,会用到交换分区(以下简称 Swap)。Swap 其实就是把一块磁盘空间当成内存来用。它可以把进程暂时不用的数据存储到磁盘中(这个过程称为换出),当进程访问这些内存时,再从磁盘读取这些数据到内存中(这个过程称为换入)。

不过要注意,通常只在内存不足时,才会发生 Swap 交换。并且由于磁盘读写的速度远比内存慢,Swap 会导致严重的内存性能问题。

第三种方式提到的 OOM(Out of Memory),其实是内核的一种保护机制。它监控进程的内存使用情况,并且使用 oom_score 为每个进程的内存使用情况进行评分:

  • 一个进程消耗的内存越大,oom_score 就越大;
  • 一个进程运行占用的 CPU 越多,oom_score 就越小。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走【关注VX公众号:互联网杂货铺,免费领取】:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1316261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HPM6750系列--第九篇 GPIO详解(基本操作)

一、目的 在之前的博文中我们主要介绍了不同系统不同开发编译调试环境的配置和操作(命令行方式、Visual Studio Code、Segger Embedded Studio for RISC-V),以帮助大家准备好学习环境为目的,但是未涉及到芯片本身以及外设的讲解。…

CCF编程能力等级认证GESP—C++2级—20230318

CCF编程能力等级认证GESP—C2级—20230318 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)画三角形百鸡问题 答案及解析单选题判断题编程题1编程题2 单选题…

【MySQL学习之基础篇】概述

文章目录 1. mysql的启动和停止命令2. 客户端连接3. 数据模型 1. mysql的启动和停止命令 通过指令启动或停止,以管理员身份运行cmd,进入命令行执行如下指令: (1)启动myaql net start mysql(2)…

解决App Store上架提示您必须上传 12.9 英寸 iPad Pro(第 2 代)显示屏的截屏

出错场景 在App Store Connect中,上架App时,出现以下错误提示. 要开始审核流程,必须提供以下项目:您必须上传 12.9 英寸 iPad Pro(第 2 代)显示屏的截屏。(2048,2732)您…

netty-daxin-2(netty常用事件讲解)

文章目录 netty常用事件讲解ChannelHandler接口ChannelHandler适配器类ChannelInboundHandler 子接口Channel 的状态调用时机ChannelHandler 生命周期示例NettServer&CustomizeInboundHandlerNettyClient测试分析 ChannelInboundHandlerAdapter适配器类SimpleChannelInboun…

【MySQL学习之基础篇】多表查询

文章目录 1. 多表关系1.1. 一对多1.2. 多对多1.3. 一对一 2. 多表查询概述2.1. 数据准备2.2. 概述 3. 查询的分类3.1. 内连接查询3.2. 外连接查询3.3. 自连接3.3.1. 自连接查询3.3.2. 联合查询 3.4. 子查询3.4.1. 概述3.4.2. 标量子查询3.4.3. 列子查询3.4.4. 行子查询3.4.5. 表…

等等Domino 14.0FP1

大家好,才是真的好。 节奏确实太快了,有时候我深感我也追不上。 以前Notes Domino是三年磨一剑,也就说每三年才发一个大版本,从2019年开始,进行了高频提速,居然一年一个大版本! 周末&#xf…

vue-json-excel 在导出一行a-table明细后再去导出另一行明细但导出结果还是和第一次一样

通过接口等拿到数据后要使用setTimeout稍微延时下再去触发导出,不然数还未更新就导出了

分库分表以后,如何实现扩容?

在实际开发中,数据库的扩容和不同的分库分表规则直接相关,今天我们从系统设计的角度,抽象了一个项目开发中出现的业务场景,从数据库设计、路由规则,以及数据迁移方案的角度进行讨论。 从业务场景出发进行讨论 假设这…

LeetCode(60)K 个一组翻转链表【链表】【困难】

目录 1.题目2.答案3.提交结果截图 链接: K 个一组翻转链表 1.题目 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xf…

1231. 航班时间(整行字符串输入:getline(cin,line))

题目: 1231. 航班时间 - AcWing题库 输入样例: 3 17:48:19 21:57:24 11:05:18 15:14:23 17:21:07 00:31:46 (1) 23:02:41 16:13:20 (1) 10:19:19 20:41:24 22:19:04 16:41:09 (1)输出样例: 04:09:05 12:10:39 14:22:05 思路: …

Jmeter分布式性能测试,80%资深测试都会遇到这个坑!

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

鸿蒙HarmonyOS4.0 入门与实战

一、开发准备: 熟悉鸿蒙官网安装DevEco Studio熟悉鸿蒙官网 HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 应用设计相关资源: 开发相关资源: 例如开发工具 DevEco Studio 的下载 应用发布: 开发文档:

PMP项目管理 - 质量管理

系列文章目录 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. PMP项目管理 - 质量管理 系列文章目录一、规划质量管理 - 关注工作需要达到的质量二、管理…

爆火的“数字人”,你还不知道吗?

数字人是一种基于人工智能技术创建的虚拟实体,具有高度智能化和交互性。他们可以像真正的人类一样思考、学习和表达情感,与人类进行对话和互动。数字人的出现在电影中已经有了一些令人难忘的片段。 首先,值得一提的是电影《阿凡达》中的数字…

maui中实现加载更多 RefreshView跟ListView(1)

效果如图: MainPage.xaml.cs: using System; using System.Collections.ObjectModel; using System.Threading.Tasks; using Microsoft.Maui.Controls; using Microsoft.Maui.Controls.Xaml; using System.ComponentModel; using System.Runtime.CompilerServices…

基于Java SSM框架实现智能停车场系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现智能停车场系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个智能停车场管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述…

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串 解法1 拼接字符串-掐头去尾后判断是否含有原字符串解法2 KMP——重复子串的最小单位是这个字符串里的最长相等前后缀所不包含的子串解法3 暴力解法KMP ---------------🎈🎈题目链接&…

编译 pywinhook v1.6.2 的环境设置和步骤

准备做一个鼠标事件响应程序。 查了一下相关python的第三方类库,发现有 pyhook。 一、起源 pyhook 1、pyhook是最早的版本 pyhook支持的python版本比较低,代码在 https://sourceforge.net/projects/pyhook/ 2、之后产生了两个并行版本 pyHook3 和 p…

来聊聊Spring的循环依赖

文章目录 首先了解一下什么是循环依赖简述解决循环依赖全过程通过debug了解Spring解决循环依赖全过程Aservice的创建递归来到Bservice的创建然后BService递归回到了getAservice的doGetBean中故事再次回到Aservice填充BService的步骤 总结成流程图为什么二级就能解决循环依赖问题…