news 2026/2/14 9:43:41

性能测试:内存瓶颈问题分析和调优

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
性能测试:内存瓶颈问题分析和调优


做性能测试的时候,如果只管压测执行,不管分析和调优,那么就相当于看医生只管开化验单,不管治病开药,就是耍流氓的行为。所以,真正做性能测试的同学一定要会做性能结果分析和问题调优。

然后内存不足/内存泄露/内存溢出等内存问题是性能分析和调优非常常见的一类问题,所以,今天我们就来深入系统的学习一下内存相关的知识,以帮助大家在遇到内存性能瓶颈的时候进行分析和调优工作。

内存概念

计算机的存储系统分为主存储系统(内存) 辅助存储系统(外存)

外存 :计算机的辅助存储器,包括硬盘、软盘、光盘、网络云盘等 【输入-键盘,鼠标,输出- 屏幕,音频 视频】

内存:内存(Memory)又称主存,用于暂时存放中间态的临时数据:是外设与CPU进行沟通的桥梁

问题:为什么需要一个内存作为桥梁来链接CPU和外存呢?为什么不直接设计CPU个内外直接连接交互呢?

因为外存的性能是比较差的,CPU速度非常的快,如果直接去外存获取数据,外设会拖垮cpu的性能。

所以可以理解为内存就是cpu和外设之间的缓存机制,CPU需要的数据先从外存加载到内存,提高cpu读取数据的效率和整体性能的。

内存和外存区别

速度不同:内存要比外存速度快,但是比CPU要慢

容量不同:内存一般几个G,外存一般几个T

访问权限不同:CPU只能直接访问内存;外存的东西要先到内存CPU才能处理

易失性不同:内存关机断电,数据就会全部丢失;外存数据一直都在

内存分析工具

在性能测试执行的过程中,我们需要用各种分析监控工具去观察内存的使用情况,以分析内存的性能瓶颈。常用的内存分析主要有如下几种:

1、/proc/meminfo,Linux内存总览

MemTotal:所有可用的内存大小(=物理内存 - 预留位和内核使用),所以小于物理内存

MemFree:表示系统尚未使用的内存

MemAvailable:真正的系统可用内存。这个使我们去看系统内存是否够用的重点数据。

系统中有些内存虽然已被使用但是可以部分回收的(cache/buffer、slab)

Buffers :(缓冲)对原始磁盘块的临时存储,也就是用来缓存磁盘的数据。内核可以把分散的写集中起来,统一优化磁盘的写入

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

2、free命令:显示当前系统未使用的和已使用的内存数目,被内核使用的内存缓冲区;

这是最常用的内存分析命令,包含的参数主要有:

-h:人类方便查看的格式显示

-c:打印的次数

-s:打印的时间间隔

-t:显示total 这个不太会去关注

显示的结果信息:物理内存一行,交换分区一行

used:已经使用的内存大小;

MemTotal = used + free + buff/cache

avaliable=free+部分buff/cache

shared表示共享内存大小,一般用于进程间通信

3、top命令| htop命令: 内存相关内容,进程内存使用情况分析

这两个命令都可以查看内存和CPU相关的信息,不过top是系统自带的命令,htop不是系统自带的,要额外安装:yum -y install htop。

htop的显示结果更加详细和友好一些:

关键信息用不同的颜色高亮显示了;

然后内存也默认用M为单位显示,更加直观;

command:显示具体哪个命令 详细的执行启动命令都会显示

最底下还有一行快捷工具栏:比如F6[. ] 可以选择进行排序; h【F1】可以看帮助文档


其中显示的信息解释如下:

VIRT:virtual memory usage,进程占用的虚拟内存大小。

RES:resident memory usage,进程常驻内存大小,也就是实际物理内存占用情况

一般我们看进程占用了多少内存,就是看的这个值。

SHR:shared memory,共享内存大小,不常用。

%MEM:进程所占用的物理内存百分比

4、vmstat,用于进行系统全局分析和内存监控分析

memory:总内存大小 ,包括物理内存+ 交换分区内存

swpd:使用的虚拟内存的大小。解释:如果该值大于0,表示你的机器物理内存不足了

free:可用的物理内存大小;如果free很少,不一定内存不足;如果同时si/so很少,是正常的;

buff:物理内存用来缓存读写操作的buffer大小

cache:物理内存用来缓存进程地址空间的cache大小

swap:如果频繁写入写出,表示你的机器物理内存不足了。

si(换入):每秒从SWAP(交换分区)读入到RAM的大小

• si>0,表明服务器需要更多内存,需要从SWAP上将内存段复制回内存,导致服务器速度变慢

• =0,正常;长期都>0,可能存在性能问题

so(换出):每秒从RAM写出到SWAP的大小

• so>0,并不能说明出现了内存瓶颈,写到交换分区是正常的

bi(blocks in):表示从外部设备(如磁盘)读入到内存的数据块数量。在读操作中,随着数据的读取,bi的值会增加。这反映了系统从外部设备读取数据的活动水平。

bo(blocks out):表示从内存写出到外部设备的数据块数量。在写操作中,随着数据的写入,bo的值会增加。这反映了系统将数据写入外部设备的活动水平。

5、jmap命令,jdk自带的分析工具,专门用来分析java项目的内存情况

命令:jmap [options] pid,参数有:

-dump: 生成java堆栈的快照信息

-heap:显示java堆详细信息,使用哪种回收机制、参数配置、分代情况

-histo:显示堆中对象统计信息,包括类、实例数量

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 2:24:46

基于SpringBoot和Vue的实验报告管理系统的设计与实现

实验报告管理系统的背景教育信息化的发展对实验教学管理提出了更高要求。传统实验报告管理依赖纸质文档或简单电子文档,存在效率低、易丢失、难以追溯等问题。高校实验室每年产生大量实验报告,手工批改和归档消耗教师大量时间,学生也无法便捷…

作者头像 李华
网站建设 2026/2/10 7:16:51

GSK928数控车削仿真系统的研究与开发NC代码插补功能的设计

2系统开发工具及运行环境 2.1面向对象技术 所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向对象设计首先强调来自域的对象,然后围绕对象设置属性和…

作者头像 李华
网站建设 2026/2/13 11:13:19

鼠标盖凹模加工及机床可视化仿真的研究

第三章 数控加工关键技术的研究 计算机辅助制造CAM从狭义上讲就是计算机辅助机械加工,也就是数控加工,其核心是数控编程和数控加工工艺的设计。在这一章中将介绍与数控加工技术有关的内容。3.1 数控编程的定义 生成数控机床进行零件加工的数控程序的过程…

作者头像 李华
网站建设 2026/2/8 11:35:25

收藏!未来5年程序员最优赛道:AI大模型必学指南

毫不夸张地说,未来5年,能让程序员实现职业跃迁的最优技术方向,毫无疑问是AI大模型!无论是职场新人还是资深开发者,布局这一领域都能抢占时代红利。 行业风向早已给出明确信号,头部企业的动作就是最好的佐证…

作者头像 李华
网站建设 2026/2/7 17:59:21

自动化测试:操作自动化测如何实现用例设计实例

在编写用例之间,笔者再次强调几点编写自动化测试用例的原则: 1、一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器。 2、一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统…

作者头像 李华
网站建设 2026/2/14 3:05:45

收藏这篇!大模型学习全攻略,从小白到高薪工程师的进阶之路

AI大模型是拥有亿级参数的神经网络模型,在自然语言处理、计算机视觉等领域广泛应用。该领域人才需求旺盛,薪资水平高,热门岗位包括模型研发工程师、算法工程师、数据科学家等。文章提供了从基础理论到前沿技术探索的七阶段完整学习路线&#…

作者头像 李华