压力测试研究
Posted Fighting_No1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了压力测试研究相关的知识,希望对你有一定的参考价值。
压力测试研究
参考资料:
- 为小白量身打造的,Jmeter压力测试使用流程,满满干货记得收藏!
- jmeter压力测试
- 手把手教你用jmeter做压力测试(详图)
- 性能测试篇 :Jmeter监控服务器性能
- jmeter之PerfMon Metrics Collector自定义查看cpu百分比
理解压力测试
压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。
运行压力测试时需监测系统资源,监测的对象有:网络阻塞情况、主机CPU使用情况、内存使用情况、缓存使用情况、数据库系统中的数据锁、回滚段、重做日志缓冲区等。监测的结果包括图像与数据文件,并且图像可以实时显示,也可运行结束后分析。
压力测试一般规定:CPU不能超过80%,内存不能超过80%。
响应时间越短、承受的并发数越多、吞吐量越大、占用的资源越少,表明系统性能越好,反之性能越差。
术语理解
- RPS:每秒请求数(Request Per Second),它描述了施压引擎向服务器实际发出的压力大小。RPS 由并发数和服务器响应时间决定。并发数过低时可能达不到预期的 RPS,并发数过高时可能压力过大直接就压垮了服务器。
- Throughput是用来衡量吞吐量的指标,通常由TPS和QPS来表示。
- TPS表示每秒通过的事务数,QPS表示每秒查询接口数。
基于JMeter进行压力测试
JMeter要求Java8环境,请提前安装并配置好Java。
JMeter下载地址:https://archive.apache.org/dist/jmeter/binaries/
解压压缩包后,在bin目录下找到jmeter.bat文件打开使用。
jmeter压力测试的步骤与接口测试相同:1)添加线程组 2)添加http请求 3)在http请求中写入url、路径、请求方式、参数等,进行一系列的请求设置(参数化、关联等) 4)添加监听器 5)运行脚本,查看结果。
1)添加线程组
右键TestPlans选择添加/线程(用户)/线程组,配置线程组:
2)添加http请求
右键线程组→添加→取样器→http请求。
如需配置http的header,可右键http请求→添加→配置元件→HTTP信息头管理器,添加对应的header配置。
注意:JMeter的http请求中“参数”与“消息体数据”不能同时配置。而且使用Parameters【参数】时,Content-Type不传,或者直接传application/x-www-from-urlencoded,若传application/json出错;
使用Body Data【消息体】时,Content-Type只能传application/json,否则报错。所以如果要使用消息体并配置url参数的话,只能将url参数写死在url上。
开启Keep-Alive的优缺点:
优点:Keep-Alive模式更加高效,因为避免了连接建立和释放的开销。
缺点:长时间的Tcp连接容易导致系统资源无效占用,浪费系统资源。
Redirect Automatically(自动重定向):只针对Get和Head请求,勾选此项则“跟随重定向”失效;自动重定向可以自动转向到最终目标页面,但是Jmeter是不记录重定向的过程内容,比如在察看结果树中是无法找到重定向过程内容的(A重定向到B,此时只记录B的内容不去记录A的内容)
Follow Redirects(跟随重定向):Http Request取样器的默认选项,当响应code是3xx时(301永久性转移,302暂时性转移),自动跳转到目标地址。与自动重定向不同,Jmeter会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,所以此时可以对响应的内容做关联。
3)添加监听器
右键线程组→添加→监听器→查看结果树/聚合报告,运行线程组,查看聚合报告结果。
压测结果分析:
1、有错误发生,需要与开发确认,是否允许错误的发生或者错误率允许在多大范围内;
2、最大的tps:不断增加并发数,加到tps达到一定值开始出现下降时,那么这个值就是最大的tps;
3、最大并发数:一般不断增大请求,直到响应请求超时时,可认为该值为最大并发数;
4、压测过程出现性能瓶颈,若压力机管理器查看到cpu、网络和内存等都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题。
4)服务器性能监控
1、安装插件管理器
首先下载plugins-manager.jar,将jar包放到jmeter的lib/ext目录下,重启jmeter。
能在“选项”下查看到Plugins Manager,则说明安装成功。
2、安装服务器监控插件
如果你用的是JMeter3.1以上的版本,并且安装了plugins-manager.jar,你可以在Plugins Manager那里去安装兼容高版本JMeter的PerfMon插件。
安装完成后,右键线程组→添加→监听器→jp@gc - PerfMon Metrics Collector,添加服务器性能监控器,配置监控信息。
如果你是直接下载JMeterPlugins-Extras-1.4.1.zip和JMeterPlugins-Standard-1.4.1.zip,将jar包放到jmeter的lib/ext目录下,重启jmeter。你是能在监听器中添加对应的服务器监控器的,但如果你的JMeter版本高于3.1的话,那么当你运行线程组的时候,会报下面的错误:
Uncaught Exception java.lang.NoSuchMethodError: org.apache.jmeter.samplers.SampleSaveConfiguration.setFormatter(Ljava/text/DateFormat;)V in thread Thread[StandardJMeterEngine,6,main]. See log file for details.
原因很简单:版本不兼容。JMeterPlugins-Standard-1.4.1.zip只能兼容到JMeter3.1。
3、在服务器运行ServerAgent
官网下载:https://github.com/undera/perfmon-agent
ServerAgent-2.2.3也可以在下面链接中自取
链接:https://pan.baidu.com/s/1lC_HlGfOgPNvIbRjK9Kltg
提取码:6s7z
双击startAgent.bat,启动serverAgent。出现下图所示情况,即表明服务端配置成功:
4、查看运行结果
运行线程组,查看jp@gc - PerfMon Metrics Collector监控器中服务器性能的变化。
查看cpu、内存发现百分比乘了1000000倍。点击设置,勾选force maximum Y axis to,设置成100。
再查看chart,最大值就是100了。
如果监听器报java.io.IOException: Agent is unreachable via TCP
, 查看服务器上4444端口是否被占,没有则可能是上一个连接没有断开,重启Agent,重新运行即可。
5)正式运行压测脚本
不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
并且修改JMeter批处理文件的环境变量:HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
以上是关于压力测试研究的主要内容,如果未能解决你的问题,请参考以下文章