性能测试监控指标及分析调优

news2024/11/23 10:47:08

目录

前言:

一、哪些因素会成为系统的瓶颈?

二、哪些指标做为衡量系统的性能

1、RT 响应时间,包括如下

2、TPS 吞吐量

3、资源使用率

三、性能测试注意的问题

四、定位性能问题的时候,可以使用自下而上的策略分析排查

五、优化性能问题的时候,可以使用自上而下的策略进行优化

1、应用层调优

2、中间件调优

3、系统调优

4、调优的策略

5、兜底策略


前言:

性能测试是评估系统在不同负载条件下的性能和稳定性的过程。在进行性能测试时,监控指标的选择和分析调优是非常重要的环节。

一、哪些因素会成为系统的瓶颈?

1、CPU,如果存在大量的计算,他们会长时间不间断的占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题,例如频繁的 FullGC,以及多线程造成的上下文频繁的切换,都会导致 CPU 繁忙,一般情况下 CPU 使用率<75% 比较合适。

2、内存,Java 内存一般是通过 jvm 内存进行分配的,主要是用 jvm 中堆内存来存储 Java 创建的对象。内存的读写速度非常快,但是内存空间又是有限的,当内存空间被占满,对象无法回收时,就会导致内存溢出或内存泄漏。

3、磁盘 I/O,磁盘的存储空间要比内存存储空间大很多,但是磁盘的读写速度比内存慢,虽然现在引入 SSD 固态硬盘,但是还是无法跟内存速度相比。

4、网络,带宽的大小,会对传输数据有很大影响,当并发量增加时,网络很容易就会成为瓶颈。

5、异常,Java 程序,抛出异常,要对异常进行捕获,这个过程要消耗性能,如果在高并发的情况下,持续进行异常处理,系统的性能会受影响。

6、数据库,数据库的操作一般涉及磁盘 I/O 的读写,大量的数据库读写操作,会导致磁盘 I/O 性能瓶颈,进而导致数据库操作延迟。

7、当在并发编程的时候,经常会用多线程操作同一个资源,这个时候为了保证数据的原子性,就要使用到锁,锁的使用会带来上下文切换,从而带来性能开销,在 JDK1.6 之后新增了偏向锁、自旋锁、轻量级锁、锁粗化、锁消除。

二、哪些指标做为衡量系统的性能

1、RT 响应时间,包括如下

1.1 数据库响应时间,即数据库操作的时间

1.2 服务端响应时间,服务端包括 Nginx 分发的请求所消耗的时间及服务端程序执行所消耗的时间。

1.3 网络响应时间,网络传输,网络硬件需要对传输的请求进行解析所消耗的时间

1.4 客户端响应时间,一般 Web、App 客户端,消耗时间可以忽略不计,但是如果客户端存在大量的逻辑处理,消耗的时间有能能就会变长。

2、TPS 吞吐量

2.1 磁盘吞吐量

IOPS(Input/Output Per Second)每秒的输入输出量,这种是单位时间内系统能处理的 I/O 请求数量,I/O 请求通常为读或写数据操作请求,关注随机读写性能,适用于随机读写频繁的应用,如小文件存储,邮件服务器。
数据吞吐量,这种是单位时间可以传输的数据量,对于大量顺序读写频繁的应用,传输大量连续数据,例如视频编辑。

2.2 网络吞吐量

指网络传输时没有丢帧的情况下,设备能够接受的最大数据速率。网络吞吐量不仅跟带宽有关系,还跟 CPU 处理能力、网卡、防火墙、以及 I/O 等紧密联系,吞吐量的大小由网卡的处理能力、内部程序算法以及带宽大小决定。

3、资源使用率

3.1 CPU 使用率,首先可以先了解 CPU 的基本信息,包括物理 CPU 的个数、单个 CPU 的核数,然后可以通过命令查看使用率,vmstat、mpstat、top

3.2 内存使用率,free -m、vmstat、top

3.3 磁盘 I/O, iostat、 iotop、

3.4 网络 I/O,netstat、ifconfig、tcpstat、

三、性能测试注意的问题

1、我们在做性能测试的时候,系统的运行会越来越快,后面的访问速度比我们第一次访问的速度快了好几倍,这是因为 Java 语言编译的顺序是,.java 文件先编译为.class 文件,然后通过解释器将.class 的字节码转换成本地机器码后,才能运行。为了节约内存和执行效率,代码最初被执行时,解释器会率先解释执行这段代码。随着代码被执行的次数增多,虚拟机发现某个方法或代码运行的特别频繁,就被认定为热点代码(Hot Spot Code)。为了提高热点代码的执行效率,在运行时虚拟机将会通过即时编译器(JIT)把这些代码编译成为本地平台相关的机器码,然后储存在内存中,之后每次运行代码时,直接从内存中获取。这样就会导致第一次系统运行慢,后面访问的速度快几倍。

2、在做性能测试的时候,每次测试处理的数据集都是一样的,但是结果却有差异,这是因为测试时,伴随着很多不稳定因素,比如机器其他进程的影响、网络波动以及每个阶段 JVM 垃圾回收的不同等。我们可以通过多次测试,将测试结果求平均,只要保证平均值在合理范围之内,并且波动不是很大,这种情况,性能测试就算通过。

四、定位性能问题的时候,可以使用自下而上的策略分析排查

当我们进行压测之后,我们会输出一份性能测试报告,其中包括,RT、TPS、TP99,被压服务器的 CPU、内存、I/O,以及 JVM 的 GC 频率。通过这些指标可以发现性能瓶颈。我们可以采用自下而上的方式进行分析。

1、首先从操作系统层面,查看系统的 CPU、内存、I/O、网络的使用率是否异常,再通过命令查找异常日志,最后通过日志分析,找到导致瓶颈的问原因。

2、还可以从 Java 应用的 JVM 层面,查看 JVM 的垃圾回收频率以及内存分配情况是否存在异常,分析垃圾回收日志,找到导致瓶颈的原因。

3、如果系统和 JVM 层面都没有出现异常情况,然后可以从应用服务业务层查看是否存在性能瓶颈,例如,Java 编程问题,读写数据库瓶颈等。

五、优化性能问题的时候,可以使用自上而下的策略进行优化

整体的调优顺序,我们可以从业务调优到编程调优,最后再到系统调优

1、应用层调优

首先是优化代码,代码问题往往会因为消耗系统资源而暴漏出来,例如代码导致内存溢出,使 JVM 内存用完,而发生频繁的 FullGC,导致 CPU 偏高。

其次是优化设计,主要是优化业务层和中间件层代码,例如可以采用代理模式,放在频繁调用的创建对象的场景里,共享一个创建对象,减少创建对象的消耗。

再次是优化算法,选择合适的算法降低时间复杂度。

2、中间件调优

MySQL 调优

1)、表结构与索引优化。

主要是对数据库设计、表结构设计以及索引设置维度进行的优化,设计表结构的时候,考虑数据库的水平与垂直的拓展能力,提前规划好将来数据量、读写量的增长,规划好分库分表方案。对字段选择合适的数据类型,优先选用较小的数据结构。

2)、SQL 语句优化。

主要是对 SQL 语句进行的优化,使用 explain 来查看执行计划,来查看是否使用了索引,使用了哪些索引。也可以使用 Profile 命令分析语句执行过程中各个分步的耗时。

3)、MySQL 参数优化。

主要是对 MySQL 服务的配置进行优化,例如连接数的管理,对索引缓存、查询缓存、排序缓存等各种缓存大小进行优化

4)、硬件及系统配置。

对硬件设备和操作系统设置进行优化,例如调整操作系统参数、禁用 swap、增加内存、升级固态硬盘。

3、系统调优

首先是操作系统调优,Linux 操作的内核参数设置可以进行调优,已达到提供高性能的目的。\
其次,JVM 调优,设置合理的 JVM 内存空间,以及垃圾回收算法来提高性能,例如,如果业务逻辑会创建大对象,我们就可以设置,将大的对象直接放到老年代中,这样可以减少年轻代频发发生 YongGC,减少 CPU 的占用时间。

4、调优的策略

首先是时间换取空间,有的时候系统对查询速度要求不高,对存储空间要求较高,这个时候我们可以考虑用时间换取空间。

其次是空间换取时间,用存储空间提升访问速度,典型的就是 MySQL 的分库分表策略,MySQL 表单数据存储千万以上的时候,读写性能就会下降,这个时候我们可以将数据进行拆分,以达到查询的时候,每个表的数据是少量的,以达到提升性能的目的。

5、兜底策略

系统调优后,仍然还会存在性能问题,这个时候我们需要有兜底策略,
首先是限流,对系统的入口设置最大访问限制,同时采取断熔措施,返回没有成功的请求。
其次是横向扩容,当访问量超过某一个阈值时,系统可以自动横向增加服务。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

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

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

相关文章

铁电材料极化高压放大器ATA-7025技术指标及使用说明

铁电材料是一类具有特殊电学性质的材料&#xff0c;在现代电子技术和器件中具有广泛的应用。铁电材料的极化是其重要的特征之一&#xff0c;极化测试是评估铁电材料性能的关键方法之一。一般铁电极化测试&#xff0c;是通过根据外电场施加的电压变化来观察材料产生的极化效应。…

unity01 界面布局

布局 坐标系 遵循左手定则&#xff0c;中指是y轴、食指是x轴、大拇指是z轴。 可以理解为x轴代表东西方向&#xff0c;z轴代表南北方向&#xff0c;y轴代表上下方向。 常用快捷键 鼠标中键&#xff1a;移动地图 右键&#xff1a;移动视角 shift鼠标左键单击gimo导航器的小方…

一行代码解决Taro中VirtualList虚拟列表渲染抖动的问题

文章目录 引言&#xff1a;问题背景一、虚拟列表的使用场景二、解决Taro组件VirtualList的抖动问题1. VirtualList的使用方法2. 解决之法 三、扩展场景&#xff1a;关于key的其他抖动问题&#xff0c;如表格组件 引言&#xff1a;问题背景 使用Taro 提供的组件库 VirtualList …

微信合并转发的图片如何批量保存

今天遇到一个场景&#xff1a;朋友给转发来了一个合并的聊天记录&#xff0c;里面是几十张图片&#xff0c;希望能打印出来。逐张保存太费手了。下面是批量保存图片的方法&#xff1a; 1、登录PC端微信&#xff1b; 2、将要保存图片的这条合并转发的聊天记录收藏&#xff1b;…

内存参数问题导致内存溢出

问题&#xff1a;内存参数问题导致内存溢出 1、文件过大&#xff0c;进行分块 2、 运行参数&#xff0c;使用最大内存配置2时&#xff0c;导致空指针异常。 3、获取详细报错信息-内存溢出 多线程捕获Throwable异常 修改代码&#xff0c;捕获Throwable&#xff0c;获取异常 异…

Go安装环境

一、golang编译器下载 网址&#xff1a;https://golang.google.cn/dl/ 我自己是在本地测试的 就安装的是windows的 二、环境配置 编译器安装完成后&#xff0c;找到安装文件夹下的bin文件夹&#xff0c;里面含有 go.exe 可执行文件&#xff0c;将 bin 文件夹的路径添加到系统…

图像标注是什么?及其类型和应用

什么是图像标注&#xff1f; 图像标注是与您交互的许多人工智能产品的基础&#xff0c;并且是计算机视觉&#xff08;CV&#xff09;领域重要的过程之一。在图像标注过程中&#xff0c;数据标注员使用标签或元数据来标记AI模型学习识别的数据特征。然后&#xff0c;这些图像标…

C++模拟实现vector

目录 1.代码实现 2.注意事项 1.成员变量 2. 不能使用memcpy函数拷贝数据 1.用string类型测试时&#xff0c;要考虑到vs可能把数据存储在数组buffer里面 3.insert函数中指针的失效性 1.加引用&#xff0c;那么就不能传常量&#xff0c;比如v.begin() 3 2.加引用&#x…

C#委托相关知识

最开始学习C#的时候&#xff0c;简单的看过委托&#xff0c;最近工作中经常需要使用到委托。这篇笔记是对之前看过的委托的一个补充&#xff0c;也是对最近工作中遇到的委托的一个总结吧。 这里使用的是窗体程序作为例子。实例在文末&#xff0c;可下载。 委托是一个类&#xf…

【动手学深度学习】--15.含并行连结的网络GoogLeNet

文章目录 含并行连结的网络GoogLeNet1.Inception块2.GoogLeNet模型3.训练模型 含并行连结的网络GoogLeNet 学习视频&#xff1a;含并行连结的网络 GoogLeNet / Inception V3【动手学深度学习v2】 官方笔记&#xff1a;含并行连结的网络&#xff08;GoogLeNet&#xff09; 1.…

【智能交互】OPPO接入小布语音技能通关教程:个人开发者实现接口调用

目录 前言实际操作注册OPPO平台账号打开创建技能界面创建技能创建意图槽位解析对话管理对话测试接口代码编写接口创建新建意图对话管理测试猜想测试相关文档前言 适用人群:本教程适合大赛接入小布语音技能的同学以及初次使用小布助手的开发者 本篇文章是博主弄了多次测试才勉…

勒索花样繁多,“Sophos Encrypt”披马甲进行勒索攻击

近日&#xff0c;网络安全供应商Sophos发表声明&#xff0c;称Sophos被一款名为“Sophos Encrypt”新型勒索软件冒充&#xff0c;该勒索软件进行攻击时会冒用Sophos品牌名称&#xff0c;并将用户重要文件进行加密以勒索赎金。 现在的勒索软件类型多样&#xff0c;令企业防不胜防…

LeetCode·每日一题·874. 模拟行走机器人·哈希

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/walking-robot-simulation/solutions/2350184/ha-xi-biao-zhu-shi-chao-ji-xiang-xi-by-x-20cg/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获得授权&am…

【iPaaS干货分享】大型企业都在用的新一代SAP集成方式,你了解吗?

目录 目前企业实现SAP集成的主要方式 一、使用SAP PI/PO实现SAP与外部系统的集成 二、使用自开发方式 SAP新一代集成方式——基于iPaaS SAP连接器 一、分钟级实现SAP系统的集成 二、统一集成接口及安全管理 三、可视化编排改造SAP接口 SAP&#xff08;Systems, Applicatio…

GO语言方法集

实际上,这里 那为什么还要生产包装方法呢?主要是为了支持接口. 接口不能直接使用接收者为值类型的方法.因为我们A(a)接受者是第一个参数,而这个参数是动态派发的,参数放在栈的局部变量,编译器在编译阶段不能确定这个量的大小.而指针平台确定了大小也就确定了.面对这个问题,编译…

如何使用MATLAB软件完成生态碳汇涡度相关监测与通量数据分析

MATLAB MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 [1] MATLAB是matrix&laboratory两个词的组合&#xff0c;意为矩阵工厂&a…

Java List集合 -- 最常用的两种排序方法

现在有一个类 public class Person {private int id;private int age;private String name;public Person(int id, int age, String name) {this.id id;this.age age;this.name name;}public int getId() {return id;}public int getAge() {return age;}public String getN…

149206-86-0,DOTA GGGA,双功能螯合物,修饰在多肽上的螯合剂

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 规格单位&#xff1a;g |货期&#xff1a;按照具体的库存进行提供 | 纯度&#xff1a;95%| PART1-------试剂描述&#xff1a; 螯合剂Dota-ggga&#xff08;CAS号&#xff1a;149206-86-0&#xff09;&#xff0c;螯合…

skbuff.h在哪

今天看来下底层socket的实现&#xff0c;发现很多人都说有个skbuff结构&#xff0c;我就想着去找下这个&#xff0c; cat /include/linux/skbuff.h 结果找不到&#xff0c;查了下&#xff0c;需要下载内核源码 //Ubuntusudo apt install linux-headers-genericdpkg -S skbuff.…

Linux系统配置Node.js环境详细教程(图文讲解)

前言&#xff1a;在使用Jenkins部署Vue项目的时候&#xff0c;如果没有安装Node.js环境的话&#xff0c;Jenkins会无法对Vue项目进行构建&#xff0c;所以本期出了一篇关于在Linux系统如何配置Node.js环境的讲解&#xff0c;以博客的方式记录一下我详细的配置流程和踩过的坑&am…