四.性能测试的方法

【面试:压力测试与负载测试的区别是什么?】

1.负载测试

目的: 1、验证服务被部署的系统出现资源瓶颈的时候,服务依然能够提供产品的特性 2、找到系统的最大饱和状态,或者是最大的处理极限,为系统后续的容量规划提供参考的数据

在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量

2.压力测试

该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut,OOM,OverStackExpection(堆栈异常)。压力测试的特点: 检查系统在处于压力情况下时应用的性能表现 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上) 这种方式一般用于测试系统的稳定性 稳定性:指的是系统在最大的极限下,依然能够正常的访问,不会对客户造成任何的影响。

验收测试流程:测试完成后产品经理进行验收,会有邮件回复

3.验收负载测试

在QA的环境模拟生产运行的业务压力和使用场景组合,测试系统的性能是否满足生产环境的性能诉求。

流量回放:

获取生产环境的网络请求,拿到QA的环境执行

4.配置测试

被测环境软硬件环境参数的调整,达到最优的分配原则。

JVM:CPU,内存 MySQL:连接数,超时参数 操作系统监控:CPU和内存 使用率达到多少的时候触发报警机制 达到一个好的系统的表现:服务在客户端高并发的情况下依然能够正常的为客户提供业务的能力和服务

【一个好的系统表现应该是如何的?】

能满足各种高并发状况依然为客户提供业务能力和服务

高并发下特别容易发生死锁、线程同步,尤其是文件读写业务
死锁:

A和B两个,为了保持线程同步,那么A操作B的时候,锁定B,B操作A的时候,锁定A。

线程同步:

A和B两个任务,任务就是线程,任务发生冲突。处理方式:加锁机制 , A操作时B不能操作

5.并发测试

模拟用户的并发访问,测试多用户并发访问同一个应用时是否存在死锁或者其他的问题,并发测试的特点是: 发现系统中可能隐藏的并发访问(线程同步和死锁)的问题 关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用(调度算法)情况 使用的测试工具如profiler等

并发用户数:描述的是同一时间同时向客户端发出请求的客户

吞吐量:每秒能处理多少请求

6.可靠性测试(稳定性测试)

稳定性测试:一直请求,持续不间断的向系统发送请求,系统在很长时间段能稳定的回复请求

可靠性测试:需要加载一定的业务压力,给系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件下是否能稳定运行。

五.JMeter里边做性能测试

(一)jmeter执行原理

JMerer通过线程组来驱动多个(也可以理解为LR⼯具⾥⾯的虚拟⽤户)运⾏测试脚本对⽬标服务器发起⼤量的⽹络请 求,在每个客户端上可以运⾏多个线程组,也就是说⼀个测试计划⾥⾯可以包含N个线程组。

 

 

 1.在取样器错误后要执行的动作

继续:

一个请求错误不会耽误后边的请求执行

启动下⼀个进程循环:

一个请求错误,后边的请求不再执行。

如果请求出现问题,同⼀脚本中的其他请求就都不再执⾏,直接执⾏下⼀个进程的信息。如登录后下⼀个请求是查 看个⼈主⻚,但是因为登录出错,下个接⼝查看个⼈主⻚就不会被执⾏。

停⽌线程:

停⽌线程指的是如果请求失败,就停⽌当前线程执⾏,不再继续执⾏。如果线程数很多的,那么导致的结果是停⽌ 的线程就会很多,处于真正运⾏的线程会很少,最后导致服务器的负载不够,⼀般不建议构选改选项。

停⽌测试:

如果请求失败,那么停⽌所有线程执⾏,也就是说停⽌整个测试。

(二)场景设置

2.线程属性

线程数:

等价于有多少人同时发送这个请求

Ramp-Up时间(秒)

多⻓时间内开始执⾏,每秒执行线程数=设置的线程数/Ramp-Up

该属性指的是所有线程从启动到开始运⾏的时间间隔,单位是秒,也就是说所有线程在多⻓时间内开始执⾏,如线 程数设置50,设置的时间为5秒,那么计算的公式为:每秒执行线程数=设置的线程数/Ramp-Up

循环次数(可以做稳定性测试)

请求的重复次数。如果选择“永远”,那么请求将⼀直进⾏,不建议这样操作。

3.调度器(负载测试)

所谓调度器可以理解为设置何时开始运⾏。

持续时间

测试计划持续多⻓时间

启动延迟

从当前时间延迟多⻓时间开始运⾏测试,也就是说点击执⾏后,仅仅是做初始化的场景,不会执⾏测试,等待延迟 到达后开始运⾏测试,执⾏的时间为持续时间设置的时间。

 

 

场景释义:

100个线程,用时二十秒,每秒五个线程,启动延迟是十秒,十秒内可以准备五十个,在十秒过后,先是用一秒跑完五十个线程,剩下的五十个,每秒五个线程,跑十秒

 

(三)jmeter监听器

1.聚合报告、汇总报告

 

 

 

 

 

 

聚合报告解读:

Label:取样器名称

Samples:取样器运⾏次数

Average:单个请求的平均响应时间

Median:50%请求的响应时间

90%Line:90%请求响应时间

95%Line:95%请求响应时间

99%Line:99%请求的响应时间

Min:请求的最⼩响应时间

Max:请求的最⼤响应时间

Std.Dev:响应时间的标准⽅差

Error%:事务错误率

Throughput:吞吐率,也就是TPS

KB/sec:每秒数据包流量

Avg.Bytes:平均数据流量

Received KB/sec:每秒从服务器端接收到的数据量

SentKB/sec:每秒从客户端发送的请求的数量

汇总报告,比聚合报告多一项标准偏差,低标准差sd意味着系统内的性能更稳定或一致

SD:标准偏差为您提供了一定程度的稳定性,但是,只需注意,标准偏差不会显示最慢和最快的响应,而是有助于识别响应趋势。

2.响应时间图

点击图像展示:

 

 

 

 

 

 

(四)Jmenter里边的参数化

参数化:分离数据

参数化:相同的测试步骤,不同的测试数据,那么这个时候我们把测试的数据分离到文件中,在JMeter中,是通过CSV数据文件设置来实现的。

 

 

1.txt格式【分离到记事本,调用变量】

步骤:在基本的请求已经添加结束后

1.首先建立参数化的线程组

2.在测试计划的配置元件添加CSV数据文件设置

3.在CSV中导入分离到记事本的数据,选择数据格式,定义变量名称

 

 4.最后,一定要回到参数化线程里边更改线程数的具体数据(比如记事本里边有6条数据,那么这里也是6)

 

 

2.CSV格式【分离到excel,另存为csv格式】

 

 

步骤和打开记事本一样,只是打开的是后缀为csv的文件格式。

注意:不能直接重命名修改.csv来修改文件格式,否则数据破坏

 

 

(五)Jmeter性能平台

后端监听器数据可视化展示Grafana

流程:

通过后端监听器:把JMeter执行过程中的数据写到influxDB的时序数据库,从influx DB获取数据,展示在Grafana的平台上实现数据可视化展示

(JMeter里面使用后端监听器,结合influxdb的时序数据库以及grafana可以打造性能测试的平台 通过后端监听器:把JMeter执行过程中的数据写到influxDB的时序数据库 influxD:时序数据库,用来存储JMeter发送请求的数据 Grafana:从influx DB获取数据,展示在Grafana的平台上)

 

 

步骤:

1.在jmeter里边添加后置监听器,选择influxdb写入数据

 

 2.打开Grafana网站:http://47.95.142.233:3000/d/K33EkaX7k/apache-jmeter-dashboard?orgId=1&refresh=5s&var-data_source=JMeter&var-application=wuyaShare&var-transaction=%E7%99%BB%E5%BD%95&var-measurement_name=jmeter&var-send_interval=5(这是老师的,工作会有其他的)进行数据查看

 

 JMerer通过后端监听器把测试中的数据(响应时间,总的请求数,吞吐量等数据)写入到influxDB的时序数据库,最后grafana的平台从influxDB时序数据库获取数据,可视化展示在平台上。这样就能够看得出各个不同纬度数据的变化趋势图。

(六)JMeter性能实战

1.配置修改

打开jmeter下的bin目录,jmeter.properties文件,查找到这行内容,修改:

  1. 原本是#注释的取消

  2. 将=HTML修改为csv

保存退出

 

   

2.环境变量配置

将bin目录搭建到path环境下

3.执行命令

首先进入路径,通常是自动生成在script下的

输入命令:jmeter -n -t loginServer.jmx -l login.jtl -e -o report/

 

 生成的报告在report下

 

 

也可以拖到桌面

cd desktop

输入命令:jmeter -n -t loginServer.jmx -l login.jtl -e -o report/

生成的报告在桌面

 

 

生成的报告如果做第二次要删除前一次的文件和报告再执行命令

主机监控普罗米修斯:http://47.95.142.233:3000/d/9CWBzd1f0bik001/linuxzhu-ji-xiang-qing?orgId=1&refresh=15s

4.报告查看

三个结合查看分析:Grafana 、 report 、主机监控

 

 

 

 

分析:

 

 

 

 

a.假如半夜4点服务响应需要很长时间,去看CPU内存等负载情况

b.13.33前后的吞吐量有上升下降的变化

导致加载缓慢等的原因可能有:

  • CPU占满了 平均负载 网络

  • iops读写速度也会影响

  • 如果涉及文件的io读写,还有内存占有的问题

六.JVM资源信息监控(java程序都要有)

(一)jvisualvm本地监控JVM资源信息

1.启动dbs程序

2.打开本地jvm监控

新打开cmd输入:jvisualvm

 

 右键dbplus打开

3.对jvm做并发测试,看资源利用率

java监控后大概率都有内存泄漏、线程同步、死锁的问题

当对jvm做并发测试时,关注jvm监控的资源情况和任务管理器cpu变化,查看资源利用率

 

 

 

 

 

 

【面试:虚拟用户数是1000,每秒并发50用户数】

1.监控哪些资源

2.怎么测试

监控CPU使用情况、平均负载、网络情况、吞吐量、折线图变化点

线程数设置1000,ramp-up时间设置20秒,在本地启动jvm监控。

注意:使用不同阶段的数据来测试,分析不同的数据下资源的情况比如500、1100等边界值在哪里

java的程序启动都可以自定义赋予min和max的内存

命令:java -jar -Xms10M -Xmx10M -XX:MaxMetaspaceSize=12m DBPlus-0.0.1-SNAPSHOT.jar

当赋予的内存过小,不足以启动程序就会有内存泄漏的错误

 

 

(二)jvisualvm远程监控

1.启动命令

java -Djava.rmi.server.hostname=101.43.158.84 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar -Xms8m -Xmx512m -XX:PermSize=512M -XX:MaxPermSize=1G DBPlus-0.0.1-SNAPSHOT.jar

2.查询java端口,运营开放

losf -i : java查询端口,开放java涉及到的端口,通常由运营开放

3.jvisualvm命令打开监控

4.点击远程,添加远程主机

主机名:101.43.158.84

 

 得到下图

 

 

5.添加jmx连接,101.43.158.84:1009(启动命令里边设定的端口)

 

 测试边界范围在哪里,临界点