8年资深测试总结,性能测试-性能内存详解,揭秘你的疑惑...

news2024/10/4 14:31:20

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

缓存

请添加图片描述

从 free 命令可以看到,缓存其实就是 Buffer 和 Cache 两部分的总和
字面意思,Buffer 是缓存区,Cache 是缓存,两者都是数据在内存中的临时存储

Buffer 和 Cache 的区别

man free

执行上面的命令,可以从帮助手册中看到 buffer 和 cache 说明

Buffers:内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值
Cache:内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和

注意事项:
同一个指标的具体含义,就可能因为内核版本、性能工具版本的不同而有挺大差别;
所以百度 Buffer 和 Cache 什么意思可能并不适用于你当前的环境;
所以可以通过下面说的 proc 文件系统来确认它们的含义;

proc 文件系统

/proc 是 Linux 内核提供的一种特殊文件系统,是用户跟内核交互的接口;
比方说,用户可以从 /proc 中查询内核的运行状态和配置选项, 查询进程的运行状态、统计数据等,也可以通过 /proc 来修改内核的配置;
proc 文件系统同时也是很多性能工具的最终数据来源;

了解 Buffer 和 Cache
查看帮助文档,找到它们

man proc

Buffers:
对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大 (20MB 左右)
内核就可以把分散的写集中起来,统一优化磁盘的写入,比如,可以把多次小的写合并成单次大的写等等

Cached:
从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据
这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。

SReclaimable:
是 Slab 的一部分
Slab 包括两部分,其中的可回收部分,用 SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录

问题:
Buffers 能不能缓存磁盘中读的数据?
Cached 能不能缓存磁盘中写的数据?

Buffer 和 Cache 在不同场景下的使用情况

系统配置
操作系统:Ubuntu 18.04
机器配置:2 CPU,8GB 内存
预先安装 sysstat 包 apt install sysstat
打开两个终端连接到 Ubuntu 系统上

前期准备
为了减少缓存的影响,在第一个终端中,运行下面的命令来清理文件页、目录项、Inodes 等各种缓存

echo 3 > /proc/sys/vm/drop_caches

例1:磁盘和文件写案例
文件写场景
第一个终端运行 vmstat

vmstat 1 

请添加图片描述

分析:
输出界面里, 内存部分的 buff 和 cache ,以及 io 部分的 bi 和 bo 就是要关注的重点;
buff 和 cache 就是我们前面看到的 Buffers 和 Cache,单位是 KB;
bi 和 bo 则分别表示块设备读取和写入的大小,单位为块 / 秒,因为 Linux 中块的大小是 1KB,所以这个单位也就等价于 KB/s;
正常情况下,空闲系统中,你应该看到的是,这几个值在多次结果中一直保持不变;

第二个终端运行 dd

# 读取随机设备,生成一个 500MB 大小的文件
dd if=/dev/urandom of=/tmp/file bs=1M count=500

观察第一个终端的 vmstat 运行情况

请添加图片描述

分析:
从 dd 命令开始运行时,cache 不断增加,而 buff 基本不变(看蓝色向下箭头);
在 cache 刚开始增长时,块设备 I/O 很少,bi、bo 都是 0KB,而在之后才出现大量的块设备写,bo 变成了 98384;
当 dd 命令结束后,cache 不再持续性增长,但块设备写还会持续一段时间,并且多次 I/O 写的结果加起来(bo 蓝色框),就是 dd 要写的 500M 的数据;

磁盘写场景
前提条件
需要你的系统配置多块磁盘,并且磁盘分区 /dev/sdb1 还要处于未使用状态;
如果你只有一块磁盘,千万不要尝试,否则将会对你的磁盘分区造成损坏;

第二个终端运行 dd

echo 3 > /proc/sys/vm/drop_caches

# 然后运行 dd 命令向磁盘分区 /dev/sdb1 写入 2G 数据
dd if=/dev/urandom of=/dev/sdb1 bs=1M count=2048

第一个终端运行 vmstat,观察内存和 I/O 的变化情况

请添加图片描述

分析:
buff 和 cache 都在增长,但 buff 增长速度快很多
说明写磁盘用到了大量的 Buffer

写文件时会用到 Cache 缓存数据,而写磁盘则会用到 Buffer 来缓存数据
所以,虽然文档上只提到,Cache 是文件读的缓存,但实际上,Cache 也会缓存写文件时的数据

例2:磁盘和文件读案例
文件读场景
第二个终端运行 dd 读取文件

echo 3 > /proc/sys/vm/drop_caches

# 然后运行 dd 命令读取文件数据
dd if=/dev/sda1 of=/dev/null bs=1M count=1024

第一个终端运行 vmstat 观察内存和 I/O 变化情况

请添加图片描述

分析:
读取文件时(也就是 bi 大于 0 时),Buffer 保持不变,而 Cache 则在不停增长
这跟查到的定义【Cache 是对文件读的页缓存】是一致的

磁盘读场景
第二个终端运行 dd 读取磁盘

echo 3 > /proc/sys/vm/drop_caches

# 运行 dd 命令读取文件
dd if=/dev/sda1 of=/dev/null bs=1M count=1024

第一个终端运行 vmstat 观察内存和 I/O 变化情况

请添加图片描述

分析:
读磁盘时(也就是 bi 大于 0 时),Buffer 和 Cache 都在增长,但显然 Buffer 的增长快很多;
这说明读磁盘时,数据缓存到了 Buffer 中;

总结 Buffer 和 Cache 的说明
Buffer 既可以用作将要写入磁盘数据的缓存,也可以用作从磁盘读取数据的缓存;
Cache 既可以用作从文件读取数据的页缓存,也可以用作写文件的页缓存;

Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求;

从读写角度总结 Buffer 和 Cache 缓存磁盘和文件系统的读写数据;
从写的角度来说,不仅可以优化磁盘和文件的写入,对应用程序也有好处,应用程序可以在数据真正落盘前,就返回去做其他工作;
从读的角度来说,既可以加速读取那些需要频繁访问的数据,也降低了频繁 I/O 对磁盘的压力;

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

生活不止眼前的苟且,奋斗是我们的座右铭;努力追求梦想的路上,坚持才会有收获;困难不可怕,勇敢面对每一次挑战;相信自己,你一定可以超越自我;积极奋斗,未来必将辉煌!

勇往直前,不惧困难;追求卓越,超越自我;坚持不懈,奋力拼搏;每一步都是进步,每一天都创造辉煌;相信自己,实现梦想;只有努力,才能成就未来。

只要心中有梦想,你就能超越极限。努力不是一时的热情,而是持久的奋斗。每一次坚持,都是向成功迈出的一步。相信自己,勇敢前行,终将成就非凡!

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

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

相关文章

python实现基于SVD矩阵分解的电影推荐系统设计

大家好&#xff0c;我是带我去滑雪&#xff01; SVD 是一种矩阵分解技术&#xff0c;通过将空间维数从 N 维降到 K 维&#xff08;其中K<N&#xff09;来减少数据集的特征数。在推荐系统中&#xff0c;SVD 被用作一种协同过滤技术。使用矩阵结构&#xff0c;其中行表示用户&…

CC2530 外部中断配置步骤

第一章 硬件原理图分析 第二章 配置按键中断步骤

Python:通过飞书API接口发送通知消息

通过飞书发送应用消息&#xff0c;及时收到线上异常消息 总的来说&#xff0c;飞书消息发送的前戏&#xff0c;要比企业微信和钉钉稍复杂 相关连接 官网 https://www.feishu.cn/管理后台 https://www.feishu.cn/admin开放平台 https://open.feishu.cn/ 参数准备 首先&…

JS中的函数与数组

文章目录 函数的定义与调用①、函数定义②、函数调用 函数的参数与返回值let与var关键字区别创建数组并使用数组遍历 函数的定义与调用 ①、函数定义 函数定义有三种方式&#xff1a; 第一种&#xff1a;function 函数名(){ 函数体 } 第二种&#xff1a;定义变量的语法&…

LITE TRANSFORMER WITH LONG-SHORT RANGE ATTENTION

1.摘要 在这篇论文中&#xff0c;我们提出了一种高效的移动NLP架构——Lite Transformer&#xff0c;以在边缘设备上部署移动NLP应用。Transformer已经成为自然语言处理&#xff08;例如机器翻译、问答系统&#xff09;中无处不在的技术&#xff0c;但要实现高性能需要大量计算…

Elasticsearch 初步使用

本文是 Elasticsearch官方博客文档 阅读笔记记录&#xff0c;详细内容请访问官方链接&#xff0c;本文只做重点记录 index索引 对于经常看 Elastic 英文官方文档的开发者来说&#xff0c;我们经常会看到 index 这个词。在英文中&#xff0c;它即可以做动词&#xff0c;表示建…

ASP.Net Core Web API快速搭建后台服务搭载SQLServer+FreeSQL(一)

目录 一.建立WebAPI所需要的环境 1. IDE编辑器&#xff1a;VisualStudio2019 2.数据库安装&#xff1a;SqlServer 3.下载SQL Server Management Studio (SSMS) 二.创建ASP.Net Core Web API工程 1.创建模板工程 2. 试运行案例接口 3.安装FreeSQL工具包 三.设计数据库 启…

《养生大世界》简介及投稿要求

《养生大世界》简介及投稿要求 《养生大世界》是由国家新闻总署备案&#xff0c;中国老年保健协会主管的国家级学术期刊&#xff0c;全国公开发行正规刊物。 《养生大世界》传播健康中国文化理念&#xff0c;推动健康养生科技创新发展&#xff0c;助力健康产业惠及人民。 主…

蓝桥杯单片机竞赛主观题总结(全)(2.5W字)

前言 对于蓝桥杯的单片机竞赛&#xff0c;主观题很重要&#xff0c;占了百分之70-80的大头&#xff0c;因此主观题做得怎么样决定了比赛是否能拿奖&#xff0c;而客观题的正确率很大程度上决定了你能否获得省一&#xff0c;从而进入决赛。因此我在这里分享一期关于主观题中各个…

95道MongoDB面试题

1、mongodb是什么&#xff1f; MongoDB 是由 C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 再高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在给 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数…

前端技术栈 - ES6 - Promise -模块化编程

文章目录 &#x1f55b;ES6⚡let变量⚡const常量⚡数组解构⚡对象解构⚡模板字符串⚡对象声明简写⚡对象方法简写⚡对象运算符扩展⚡箭头函数&#x1f98a;传统函数>箭头函数&#x1f98a;箭头函数对象解构 ⚡作业布置 &#x1f550;Promise⚡需求分析⚡传统ajax回调嵌套⚡p…

GO、KEGG(批量分组)分析及可视化

这篇帖子其实是更新、补充、解决一下问题的。我们号写过很多GO、KEGG富集分析的可视化&#xff0c;数不胜数&#xff0c;可以在公众号检索“富集”了解更多。我们演示的时候都是直接提供了富集的结果文件&#xff0c;一般演示为了图方便&#xff0c;也是利用在线工具cytoscape做…

网络工程师的副业,能有多野?

大家好&#xff0c;我是许公子。 在网工这行做了这么久&#xff0c;经常会有同事或者朋友来问我&#xff0c;有没有什么搞副业的路子。 别说&#xff0c;选择还真挺多。 前两天的文章里&#xff0c;这位朋友就秀了一波&#xff0c;这工作速度、便捷程度、收款金额&#xff0c…

Java并发编程-线程基础

哈喽,大家好,这篇文章主要讲解Java并发编程,线程基础的知识点,讲解知识点的同时也会穿插面试题的讲解. 主要讲解以下内容 进程,线程基础常见的一些区别比较如何使用和查看线程理解线程如何运行以及线程上下文切换的知识线程方法线程状态 希望能给大家带来帮助.加油~~~ 目录 进…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十九章 口令破解与防御技术下)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、口令攻击的综合应用1、Windows NT, 2000口令攻击2、Windows XP, 2003口令攻击3、Unix系统口令攻击4、远程口令攻击 二、口令攻击的防御1、口令攻击防御概述2、保持口令的…

RS485转Profinet通讯

RS485转Profinet通讯 概述系统组成流量积算仪网关 软件总结 概述 一个支持RS485的流量积算仪的数据要被Profinet的PLC读取。制作一个网关&#xff0c;实现RS485到Profinet的转换。 系统组成 流量积算仪 支持RS485通讯&#xff0c;通讯协议是modbus RTU。采用功能码3可以读取…

非GUI模式下如何传参

非GUI模式下如何传参 Jmeter 有两种模式&#xff0c;GUI模式和非GUI模式&#xff0c;通常使用GUI模式编辑脚本&#xff0c;使用非GUI模式运行压测&#xff0c;官网上有强调&#xff0c;尽量使用非GUI模式&#xff0c;因为GUI模式下&#xff0c;jmeter UI组件本身在压测过程中会…

论文浅尝 | SimKGC:基于预训练语言模型的简单对比知识图谱补全

笔记整理&#xff1a;李雅新&#xff0c;天津大学硕士&#xff0c;研究方向为知识图谱补全 链接&#xff1a;https://dl.acm.org/doi/10.1145/3539597.3570483 动机 知识图谱补全 (KGC) 旨在对已知事实进行推理并推断缺失的链接。基于文本的方法从自然语言描述中学习实体表示&a…

Spring Boot 中的 @EnableConfigurationProperties 注解

Spring Boot 中的 EnableConfigurationProperties 注解 在 Spring Boot 中&#xff0c;EnableConfigurationProperties 注解是一个非常有用的注解&#xff0c;它可以用于启用对特定配置类的支持。在本文中&#xff0c;我们将深入探讨 EnableConfigurationProperties 注解&…

ST CubeMX 实现6对PWM同步输出/互补输出/三相PWM输出

频率为1KHz的6对PWM波形 原理:定时器1为主模式,定时器8为从模式,TIM1的定时器使能操作作为触发输出[TRGO]触发TIM8并使能TIM8的计数器,同时输出两路频率、占空比以及脉冲数量(小于256个,高级定时器重复计数功能为8位)可调PWM波形。 Tim1 参数配置 Tim8参数配置 未同步输出…