压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况。然后做针对性的测试与分析,找到影响系统性能的瓶颈,评估系统在实际使用环境下的效率情况,评价系统性能以及判断是否需要对应用系统进行优化处理或结构调整。并对系统资源进行优化。
1. 响应时间(Response Time:RT):从客服端发送请求开始到获取到服务器的响应结果的总的时间
2. HPS(Hits Per Second):每秒点击的次数
3. TPS(Transaction Per Second):系统每秒处理的交易数,也叫会话次数,一套完整的业务流程
4. QPS(Query Per Second):系统每秒处理查询的次数
在互联网企业中,如果一个业务有且仅有一个请求连接,那么TPS=QPS=HPS的,而在一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询的次数,用HPS来衡量服务器单击请求。
我们在测试的时候就会通过这些指标(HPS,TPS,QPS)的数据来衡量系统的系统,指标越高说明系统性能越好,在一般情况下,各个行业的指标范围有着比较大的差异,下面简单的列举了下,仅供参考
金融行业:1000TPS~50000TPS
保险行业:100TPS~100000TPS
制造业:10TPS~5000TPS
互联网大型网站:10000TPS~1000000TPS
互联网其他:1000TPS~50000TPS
名词 | 说明 |
最大响应时间 | 用户发出请求到系统做出响应的最大时间 |
最少响应时间 | 用户发出请求到系统做出响应的最少时间 |
90%响应时间 | 指所有用户的响应时间进行排序,第90%的响应时间 |
指标 | 说明 |
吞吐量 | 每秒钟系统能够处理的请求数,任务数 |
响应时间 | 服务处理一个请求或一个任务的耗时 |
错误率 | 一批请求中结果出错的请求所占的比例 |
官网地址:https://jmeter.apache.org/download_jmeter.cgi 下载后解压即可,然后进入到bin目录下双击 JMeter.bat文件即可启动
线程组的作用就是定义任务的相关属性,比如每秒执行多少线程,重复多少次该操作
在定义了线程组后,我们得继续定义每个线程的操作行为,也就是创建对应的取样器,在取样器中我们定义要访问的服务的协议及地址信息。
在取样器中我们定义了要访问的服务信息,然后我们就要考虑请求后我们需要获取任务的相关的指标信息。这时就用到了监视器。
搜索之后发现需要在regedit中添加注册表项MaxUserPort,TcpTimedWaitDelay重启一下就可以解决了。
打开注册表:ctrl+r 输入regedit
进入注册表,路径为:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建DWORD值,(十进制)设置为30秒。名称:TcpTimedWaitDe,值:30
新建DWORD值,(十进制)最大连接数65534。名称:MaxUserPort,值:65534
数据库、应用程序,中间件(Tomcat,Nginx),网络和操作系统等
我们还得考虑当前的服务属于
CPU密集型:计算比较影响性能--->添加CPU,加机器
IO密集型:网络IO,磁盘IO,数据库读写IO,Redis读写IO --》缓存,加固态硬盘,添加网卡
jconsole和jvisualvm是JDK自带监控工具。可以帮助我们更好的查看服务的相关监控信息,jvisualvm功能会更加的强大些。
因为是jdk6.0后自带的,我们同样的可以在cmd或者搜索框中找到
商场系统的链路
测试下相关的组件的性能
压测内容 | 压力测试的线程数 | 吞吐量/s | 90%响应时间 | 99%响应时间 |
Nginx | 50 | 2289 | 29 | 327 |
Gateway | 50 | 4000 | 6 | 59 |
单独测试服务 | 50 | 32732 | 2 | 9 |
Gateway+服务 | 50 | 5065 | 16 | 66 |
Nginx+Gateway | 50 | |||
Nginx+Gateway+服务 | 50 | 1245 | 76 | 118 |
一级菜单 | 50 | 279 | 264 | 384 |
三级分类压测 | 50 | 5.4 | 12050 | 12708 |
首页全量数据 | 50 | GG |
通过上面的压力测试我们可以发现如果后端服务及处理动态请求又处理静态请求那么他的吞吐量是非常有限的,这时我们可以把静态资源存储在Nginx中。
把服务中的静态资源上传到Nginx服务中,把静态资源文件打成一个zip包,然后拖拽到Linux中,然后我们通过
在Nginx的配置文件中指定static开头的请求的处理方式