压力测试研究

压力测试研究

参考资料:

理解压力测试

压力测试是每一个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"

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值