性能测试必备基础知识(二)

这篇具有很好参考价值的文章主要介绍了性能测试必备基础知识(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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. 软中断

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

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

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

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

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

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

3. 内存映射

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

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

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

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

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

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

 

4. 虚拟内存空间分布

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

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

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

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

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

  6. 内核空间(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 就越小。文章来源地址https://www.toymoban.com/news/detail-748656.html

到了这里,关于性能测试必备基础知识(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SEO优化基础知识大全 SEO新手入门必备知识

    网上关于SEO优化的知识很多也很杂,很多新手都不知道如何选择。本来耗子网站里每篇文章都有的详细步骤的,考虑到很杂,于是耗子对各种SEO优化基础知识进行了整理,但不是很详细,所以在每个步骤的后面都加上了相关文章链接,希望能帮助SEO新手更多的了解一下SEO基础

    2024年02月10日
    浏览(59)
  • 产品经理之基础必备知识点

    目录 前言 一.用户画像         1.1含义        1.2 举例说明 二.MVP(最小可行产品)     1.1含义     1.2 优缺点 三.体验地图         3.1 含义         3.2 举例说明 四.产品路线图         4.1 含义         4.2 举例说明 五.用户故事         5.1 含义         5.2 举例 六.用户

    2024年01月18日
    浏览(35)
  • 5.爬虫必备基础知识(urllib&requests)一

    我们浏览器在输入完网址到我们看到网页的整体内容, 这个过程中究竟发生了些什么? 我们看一下一个浏览器请求的全过程 接下来就是一个比较重要的事情了. 所有的数据都在页面源代码里么? 非也~ 这里要介绍一个新的概念 那就是页面渲染数据的过程, 我们常见的页面渲染过

    2024年04月25日
    浏览(31)
  • 【Linux系统基础快速入门详解】SSH远程连接必备网络基础知识详解

    鱼弦:CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) SSH(Secure Shell)是一种网络协议,用于通过加密的方式在不安全的网络上安全地进行远程连接和数据传输。下面是对SSH远程连接的必备

    2024年02月07日
    浏览(41)
  • 前端之路 | 1.HTML基础必备知识学习篇

    [ 点击 👉 关注「 全栈工程师修炼指南」公众号 ] 设为「⭐️ 星标 」带你从 基础入门 到 全栈实践 再到 放弃学习 ! 涉及 网络安全运维、应用开发、物联网IOT、学习路径 、个人感悟 等知识分享。 希望各位看友多多支持【关注、点赞、评论、收藏、投币】,助力每一个梦想

    2023年04月11日
    浏览(87)
  • MySQL数据库基础初学者必备知识

    目录 1.数据库的基本操作 1.1显示所有数据库 1.2创建数据库 1.3删除数据库 2.数据库的类型 2.1数值类型 2.2字符串类型 2.3日期类型 3.表的简单操作 3.1创建一个表 3.2显示表的结构 3.3显示数据库中的所有表 3.4删除指定表 4.实战练习 数据库的基本操作为:显示数据库,创建数据库

    2023年04月11日
    浏览(52)
  • IC验证必备的数字电路基础知识(三):时序逻辑电路

    参考教材:数字电路与逻辑设计(第2版)邬春明 目录 1. 边沿触发器(D触发器) 2. 时序电路描述/构成 3. 时序逻辑电路的功能描述方法 组合逻辑电路掌管了电路中的逻辑运算,基本单元是与或非门。而时序逻辑电路则掌管了电路中数据的存储。触发器就是构成时序逻辑电路

    2024年02月09日
    浏览(35)
  • 【性能测试】运维测试01之性能测试整体认知包括:TPS、请求响应时间、事务响应时间、并发用户数、吞吐量、吞吐率、点击率、资源使用率等性能指标详细介绍

    性能测试整体认知包括:TPS、请求响应时间、事务响应时间、并发用户数、吞吐量、吞吐率、点击率、资源使用率。 1.1 需求一 1.熟悉Linux、windows等操作系统,熟悉shell脚本; ⒉.熟悉jvm调优, tomcat调优等基础策略 3.熟悉mysq数据库,熟练掌握javascript、java、python、groovy等至少一门

    2024年02月16日
    浏览(29)
  • 全栈之前端 | 1.HTML基础必备知识学习篇

    [ 点击 👉 关注「 全栈工程师修炼指南」公众号 ] 设为「⭐️ 星标 」带你从 基础入门 到 全栈实践 再到 放弃学习 ! 涉及 网络安全运维、应用开发、物联网IOT、学习路径 、个人感悟 等知识分享。 希望各位看友多多支持【关注、点赞、评论、收藏、投币】,助力每一个梦想

    2023年04月11日
    浏览(45)
  • 接口测试基础知识(使用 Fiddler 抓包、使用 Postman 发起请求、Postman汉化教程)

    接口用来连接软件系统中的不同模块,一个模块可以通过调用另一个模块的接口来实现模块中的功能 通过接口文档或抓包来获取接口的基本调用方式 通过获取的接口信息来设计测试用例 发起接口测试 获取接口返回的结果,对结果进行验证和解析 验证接口URL的设计是否符合

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包