jmeter压力测试实现负载均衡

jmeter压力测试实现负载均衡,第1张

文章来源于:>检查当前的服务器硬件配置是否足够支持speedway压力测试
1、检查服务器上是否有其他进程消耗大量资源。
2、检查speedway的测试设置是否正确,如压力测试的测试数据 *** 作是否正确,测试的时间长度是否合理,负载的类型是否合理等。
3、检查speedway的网络状态是否正常,比如网络负载是否过大,是否有拥塞现象等。
4、检查speedway的数据库是否正常,比如数据库索引是否有效,数据库查询是否有效。

web压力测试通过产生真实压力来发现问题需要关注以下方面:
1、对要测试的系统进行分析,明确需要对哪一块做压力测试。比如:淘宝网站双十一期间,秒杀跟支付,此模式用户 *** 作中占比比较大
再比如:游戏,登录--开始战斗--结束战斗这种混合模式在用户 *** 作中占比较大
那么就可以针对这种占比比较大的模式进行压力测试
2、明确了要测试的点后,如何对这些测试点进行施压呢?
第一种方式可以通过写脚本产生压力机器人对服务器进行发包收包 *** 作;
第二种方式就是借助一些压力测试工具如:JMeter或LoadRunner
3、如何对这些测试点进行正确的施压呢?
那么就需要用压力测试工具或者其它方法来录制脚本,模拟用户的 *** 作
4、对测试点该施加多大的压力比较合适?该施加多少的数据才能找出系统的瓶颈?
那么就需要明确压力测试所限制的数量,即用户并发量,这里分3种情况来明确:
1)根据上级的明确规定数量,来设定最确大值,然后根据情况往上或往下增减
2)上级未规定,由自己判断,从1开始慢慢递增。如:1,5,10,20等等
3)若做过压力测试,则可以根据上次的压力测试结果为基数进行测试
5、测试完之后,如何通过这些数据来定位性能问题呢?
虽然通过这些测试结果我们可以得到TPS(吞吐量),平均响应时间等这些数据,可判断出服务器是否存在问题,但却不能定位问题。

Apache服务器自带了ab压力测试工具,可以用来测试网站性能,使用简单方便。工具/原料
Apache
方法/步骤
打开Apache服务器的安装路径,在bin目录中有一个abexe的可执行程序,就是我们要介绍的压力测试工具。
在Windows系统的命令行下,进入abexe程序所在目录,执行abexe程序。注意直接双击无法正确运行。
执行ab命令成功后,可以看到如图提示。该帮助很清楚详细的介绍了ab的用法以及各个参数的含义。

主要区别是,性质不同、目的不同、特点不同,具体如下:

一、性质不同

1、压力测试

压力测试是在强负载(大数据量、大量并发用户等)下的测试,查看应用系统在峰值使用情况下 *** 作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。压力测试可以被看作是负载测试的一种,即高负载下的负载测试,或者说压力测试采用负载测试技术。

2、负载测试

负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。负载测试更多地体现了一种方法或一种技术。

3、并发测试

指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题,几乎所有的性能测试都会涉及并发测试。

二、目的不同

1、压力测试

目的是在软件投入使用以前或软件负载达到极限以前,通过执行可重复的负载测试,了解系统可靠性、性能瓶颈等,以提高软件系统的可靠性、稳定性,减少系统的宕机时间和因此带来的损失。

2、负载测试

负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征。例如,响应时间、事务处理速率和其他与时间相关的方面。

3、并发测试

测试目的并非为了获得性能指标,而是为了发现并发引起的问题。 

三、特点不同

1、压力测试

压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。

2、负载测试

负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。

3、并发测试

在具体的性能测试工作中,并发用户往往都是借助工具来模拟的,例如LoadRunner性能测试工具中叫做虚拟用户,因为实际情况中去实现同时多人并发的测试环境要求比较高而测试成本高、测试时间也是比较长。

参考资料来源:百度百科-压力测试

参考资料来源:百度百科-负载测试

参考资料来源:百度百科-并发测试

一个压力测试的流程:

1、明确测试目标

2、制定测试计划

3、实施测试,收集参数

4、分析测试结果

5、给出优化方案

一 、明确测试目标:如果是客户的需求,那需要向客户确认,有清楚的性能指标参数,测试时就是保证系统达到该指标并能良好运转,即压力测试。如果是自己的系统需要有一个评估,那就需要完整的得到该系统的几个临界点,拿到完整的性能曲线,从而来分析部署情况,即为性能测试。不管是哪个,知道了需求,才能制定计划。

性能测试的目标是发现重大的系统瓶颈。你可以想象一个系统由一系列的瓶颈组成;发现并改善一个瓶颈往往会在其他地方产生一个新的瓶颈。例如,我曾为一运行微软Windows CE的器件部门工作。我们发现的第一大性能问题体现在某一具体硬件环境下的内存管理中。我们把问题分离出来,改善了内存分配的效率。尔后再次运行我们的测试,又找到了一个新的瓶颈,这次体现在网络吞吐量上(throughput)。解决了这个问题后,我们接着又为下一个瓶颈改善而工作,然后再下一个,直到整个系统都达到了性能目标。要记住的是:关键在于要尽早订立性能目标,否则你可能不知道什么时候该停止性能测试。

二、制定测试计划:确定使用什么工具,着重哪些参数,设置线程数,方法执行次数,执行时间,是否多个接口同时进行测试等等。

三、实施测试,收集参数:选一个施压工具,来向部署好的服务发起高并发请求,同时关注和收集性能参数。这个是我们花费时间最多的地方。通常该阶段需要反复执行,来得到想要的数据。通常来说,我们可以使用JMeter LR AB 自己写多线程等各种方式,之后介绍一下JMeter。

四、分析测试结果:即根据上一节的参数介绍来进行参数分析。

五、给出优化方案:如果是代码逻辑耗费cpu,就优化算法;如果是redis等数据库耗时,就增加节点,减少读取,读写分离,使用内存等;如果是外在条件限制,则与外部们沟通问题,共同优化等等。

使用LR对数据库进行性能测试,实际上有多种办法,包括通过现有的数据库协议进行CS模式的先录制后执行的模式,以及通过socket方式向服务器发包方式的测试方式。这些是常规书籍上介绍的比较简单上手的测试方法,但是不具备通用性,受已有协议或socket编程方式的限制,所以需要更为通用的测试方法。
用Java user的协议进行所有数据库性能的测试工作:
Java user 不需要录制,把所有的 *** 作通过java语言进行实现,通过lr调用java的class进行加压批量 *** 作,这样可以不关心被测系统是哪个数据库,只要能够通过jdbc进行访问,就能实现性能测试。
一、测试环境准备
1 被测服务器准备,根据测试目的,搭建需要的数据库服务器,确保数据库能够正常访问,正常 *** 作;
2 Java代码的准备,无论使用哪种IDE,只要能够编写访问数据库的class就可以,形式可以是j2se,也可以是j2ee,因为在 *** 作时只使用class的部分方法,所以j2ee就可以了;
3 LR的脚本调试,把java的class导入到脚本调试模式,根据需要添加事务以及其他 *** 作。
二、编写数据库访问
1 使用myeclipse,创建web project,创建如下图的包目录:
Java文件中包含各种访问数据库的方法。
需要注意的是,class中的方法必须是public static,否则LR中无法调用。由于创建的是j2ee程序,所以不用main函数,在web中就可以进行功能验证。
确认class中的方法编写完成,创建一个webjsp文件,如下:
导入class
声明类,并实例化,直接调用刚才编写的3个方法,因为这3个方法是直接对数据库进行 *** 作,不需要实参,也没有返回值,所以直接实现即可。
此时启动web服务,在浏览器中输入jsp的地址,直接刷新页面,就可以调用这3个方法,如果正确,就会对相应的表进行 *** 作,如果不正确,则需要修改相应的代码。
2 LR脚本准备:
LR脚本实际上就是对访问代码的调用,关键在于需要根据测试场景划分不同的脚本布局。
例如:在myEclipse里,我们只编写了一个class,其中包含三个方法,如果在执行性能测试时,这三个方法相互独立,互不干涉,则最简单的划分方法是,创建三个java user,每个java user中包含一个方法,做三份脚本,场景执行时分别进行调用。如果三个方法之间有相互关系,则需要根据实际情况,把有关联的方法放在一起,具体情况可按实际灵活分配。
因为已经将class文件进行编译发布了,所以可以在“java2postgres\WebRoot\WEB-INF\classes\com\lr\test”目录中找到对应的class文件,
复制这个文件,找到LR的目录:HP\LoadRunner\classes\com\lr\test\ 如果没有文件夹,按相同的内容创建。
在LR脚本中进行引包 *** 作:
将需要执行的java类以及方法,放在action中,可根据实际测试情况和所需要验证的内容,具体调试代码。
在这里可以像编写普通LR脚本一样,添加事务或集合点等内容。
由于是通过JDBC对数据库进行访问,因此要在java user中加载jdbc驱动。
运行时设置中,增加jdbc驱动,需要注意的是java user使用的本地jdk,需要至多16版本,若使用17版本,回放会有错误,这是jdk版本的问题。
*** 作完成之后,按F5或点击运行,进行脚本回放,实际此时也对数据库进行了 *** 作,可以直接查询对应的表,检查功能是否正确。
三、执行性能测试
已经有了java user的脚本,和普通web性能测试一样,设计场景、执行测试、收集报告、分析性能瓶颈即可。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10613988.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存