压力测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 压力测试

微服务压力测试

压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都

是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。

使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:

内存泄漏,并发与同步

有效的压力测试系统将应用以下这些关键条件:重复并发量级随机变化

性能指标

  • 响应时间(Response Time: RT)

响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。

  • HPS(Hits Per Second) :每秒点击次数,单位是次/秒。
  • TPS(Transaction per Second):系统每秒处理交易数,单位是笔/秒。
  • QPS(Query per Second):系统每秒处理查询次数,单位是次/秒。

对于互联网业务中,如果某些业务有且仅有一个请求连接,那么 TPS=QPS=HPS,一般情况下用 TPS 来衡量整个业务流程,用 QPS 来衡量接口查询次数,用 HPS 来表示对服务器单击请求。

  • 无论 TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:

金融行业:1000TPS~50000TPS,不包括互联网化的活动

保险行业:100TPS~100000TPS,不包括互联网化的活动

制造行业:10TPS~5000TPS

互联网电子商务:10000TPS~1000000TPS

互联网中型网站:1000TPS~50000TPS

互联网小型网站:500TPS~10000TPS

  • 最大响应时间(Max Response Time) 指用户发出请求或者指令到系统做出反应(响应) 的最大时间。
  • 最少响应时间(Mininum ResponseTime) 指用户发出请求或者指令到系统做出反应(响应)的最少时间。
  • 90%响应时间(90% Response Time) 是指所有用户的响应时间进行排序,第 90%的响应时间。
  • 从外部看,性能测试主要关注如下三个指标

吞吐量:每秒钟系统能够处理的请求数、任务数。

响应时间:服务处理一个请求或一个任务的耗时。

错误率:一批请求中结果出错的请求所占比例。

JMeter

下载安装

官网:Apache JMeter - Download Apache JMeter

cf6846c1ccb057dd359500376f0ac98f_202110041505834.png

cdf989270ddadc22e65daf802580d57a_202110041506042.png

下载对应的压缩包,解压运行 jmeter.bat 即可

dbddcea7cf725ebeedaf772eb0dd3044_202110041509517.png

JMeter压测示例

1.添加线程组

6d4c94ce6edf05c142d3dcf376e6fdd0_202110041534615.png

0b456de0045e7ed8b1e430a97f6e20cd_202110041534477.png

线程组参数详解:

  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
  • Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为 10,准备时长为 2,那么需要 2 秒钟启动 10 个线程,也就是每秒钟启动 5 个线程。
  • 循环次数:每个线程发送请求的次数。如果线程数为 10,循环次数为 100,那么每个线程发送 100 次请求。总请求数为 10*100=1000 。如果勾选了“永远”,那么所有线程会 一直发送请求,一到选择停止运行脚本。
  • Delay Thread creation until needed:直到需要时延迟线程的创建。
  • 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
  • 持续时间(秒):测试持续时间,会覆盖结束时间
  • 启动延迟(秒):测试延迟启动时间,会覆盖启动时间
  • 启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前 时间也会覆盖它。
  • 结束时间:测试结束时间,持续时间会覆盖它。

2.添加http请求

ac866abcd8b3daba888655132ddfe6cd_202110041537244.png

访问测试百度

bd848f4c112ef23cc051d4c25abaef45_202110041538603.png

3.添加监听器

7bf87921be4c9e600917fcefde8c011e_202110041538217.png

4.启动压测

ba0012c041282935c10d91d748640a43_202110041539713.png

结果分析

  • 有错误率同开发确认,确定是否允许错误的发生或者错误率允许在多大的范围内;
  • Throughput 吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加;若在压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数;
  • 压测结束,登陆相应的 web 服务器查看 CPU 等性能指标,进行数据的分析;
  • 最大的 tps,不断的增加并发数,加到 tps 达到一定值开始出现下降,那么那个值就是最大的 tps。
  • 最大的并发数:最大的并发数和最大的 tps 是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数。
  • 压测过程出现性能瓶颈,若压力机任务管理器查看到的 cpu、网络和 cpu 都正常,未达到 90%以上,则可以说明服务器有问题,压力机没有问题。
  • 影响性能考虑点包括: 数据库、应用程序、中间件(tomact、Nginx)、网络和操作系统等方面
  • 首先考虑自己的应用属于 CPU密集型还是 IO密集型

JMeter Address Already in use错误解决

windows 本身提供的端口访问机制的问题。

Windows 提供给 TCP/IP 链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。

1.cmd 中,用 regedit 命令打开注册表

2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下,

  1. 右击 parameters,添加一个新的 DWORD,名字为 MaxUserPort
  2. 然后双击 MaxUserPort,输入数值数据为 65534,基数选择十进制(如果是分布式运

行的话,控制机器和负载机器都需要这样操作哦)

  1. 修改配置完毕之后记得重启机器才会生效

https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greaer-than-5000-you-receive-t

TCPTimedWaitDelay:30

中间件对性能的影响

网站发送请求的时候,经过nginx中间件,然后转发到网关,网关再转交给后台服务器集群,商品服务将数据处理完毕再装交给网关,网关发送给nginx,nginx再返回给我们。

在真正功能执行前还经过了两个中间件:nginx、Gateway,为了探究中间件对我们的性能有没有影响以及影响有多少,于是对这些进行压测。

压测内容

Nginx

访问:linux虚拟机的nginx地址:192.168.195.100:80

9996369cd05d5a8ecab9106cee1c28e6_202110041949421.png

网关

访问:网关192.168.195.88:88

6c7dfb87472278fbc046858dadfc2710_202110041955958.png

简单服务

访问:http://localhost:10000/hello

08390eb9517b28c276b729d9b3eb006b_202110042005644.png

Nginx+网关

开启网关访问路径

访问:localhost:88/hello

3efc19621e995fd877796e3f9eaef507_202110042011411.png

全链路:简单服务+Nginx+网关

访问:gulimall.com:80/hello

b986f2c113405c407bdac1f98c91894e_202110042014221.png

首页一级菜单渲染

访问:localhost:10000/

ab9e14fcde3dd68400f4343c3a2df160_202110042018473.png

三级分类数据获取

localhost:10000/index/catalog.json

027af7c899055940938acff265cb40e9_202110042020391.png

首页全量数据获取

访问:localhost:10000/ 并开启加载静态资源

4d2b24e7bd264bb0dac9c8641b7effa0_202110042024716.png

优化业务:

Db(MySQL 优化)

模板的渲染速度(缓存)

静态资源

Nginx动静分离

每次访问都加载静态资源很浪费系统资源,需要很多的线程去处理这些资源,为了加快系统访问速度,把静态资源配置在nginx,不需要经过网关。

816bef825c7ff2039a3800d6918929b5_202110042031652.png

  • 首先,把商品服务中静态文件夹 index 放到 nginx 下 /mydata/nginx/html/static目录;
  • 给模板中所有静态资源的请求路径前都加上 /static;
  • 修改 Nginx 配置文件 /mydata/nginx/conf/conf.d/gulimall.conf
# /static/ 下所有的请求都/usr/share/nginx/html下寻找资源
location /static/ {
  root /usr/share/nginx/html;
}

b6604638187129c4a126c08b1df20fa5_202110051156038.png

显示成功

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
压力测试
  这是一张静止的图片, 你的心理压力越大, 图片转动越快, 而儿童看这幅图片一般是静止的. 测试下您心理的压力.   人重要的是没有压力, 不管来自何方. 弃之.
735 0
|
网络协议 测试技术 数据库
|
测试技术 Apache Java
|
测试技术 Linux Python
locustio压力测试
2015年7月17日 22:19:17 星期五 这里记录下学习道路, 防止忘了 操作系统是centos: 首先是linux系统, 装有Python 和 Python-devel (否则安装软件会提示python.
1942 0
|
4月前
|
监控 测试技术
如何进行系统压力测试?
【10月更文挑战第11天】如何进行系统压力测试?
225 34
|
4月前
|
缓存 监控 测试技术
服务器压力测试
【10月更文挑战第11天】服务器压力测试
145 31
|
3月前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
87 7
|
Web App开发 测试技术 BI
|
测试技术 Apache UED
话说网站压力测试
       作为一名合格的网站的架构师,需对网站整体能承载的压力了如指掌,只有这样才能做到运筹帷幄,决胜千里。       尤其是一个新项目在上线之前,首要做的是在预演环境,模拟用户访问进行压测,这样,对于其能承受多大访问量、在高并发情况下,web服务及服务器硬件的性能如何?这些数据指标我们都要收集。
1042 0

热门文章

最新文章