jmeter 压力测试地址占用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmeter 压力测试地址占用相关的知识,希望对你有一定的参考价值。

参考技术A

压测发起设备:windows 10
网络:局域网
压测软件:Jmeter 5.0
压测系统内存:Ubuntu 4核8G
php 版本:php7.1.23
nginx 版本:nginx1.14.0
mysql版本:5.7.24
Redis: 开启
CDN:关闭

压测的初期,在设置了 150qps/s 的并发数下压测几分钟后 Jmeter 就出现了如下报错。

开始考虑的方向是Nginx、PHP、MySQL做了相关限制导致线程被占用, 但是修改对应的配置后发现没有任何效果,该报错的还是报错。 查了一波资料,发现 windows 环境下的端口循环回收需要消耗2~4分钟。由此猜测可能是由于 windows下压测端口数有限,端口资源被占满,没有及时循环回收,导致报错。

使用 win + R 快捷键打开 cmd ,输入 regedit 命令打开注册表

2.1 找到 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters 目录。

2.2 右击 Parameters ,添加一个新的 DWORD ,命名为 MaxUserPort 。

2.3 然后双击 MaxUserPort ,输入 65534,基数选择 十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作)。

2.4 修改配置完毕后, 需要重启 windows 才会生效。

采用上述的解决方案之后,windows 下设置 150qps/s 并发数进行压测,暂时解决了端口占用的问题。在此基础上,将压测的并发数提高至 700qps/s,两分钟内达到 66000+ 个请求,数量超过了 65534 端口数,再次出现了同一报错。

step1: 使用 win + R 快捷键打开 cmd ,输入 regedit 命令打开注册表。

step2: 找到 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters 目录。

step3: 右击 parameters ,添加一个新的DWORD,命名为 TcpTimedWaitDelay ,将值设置为 30 , 缩短 TIME_WAIT 的等待时间。

step4: 重启windows,配置项生效。

Close_Wait 会占用一个连接,网络可用连接小。当数量过多时,可能会引起网络性能下降,并占用系统非换页内存。尤其是在有连接池的情况下(比如 HttpRequest ),会耗尽连接池的网络连接数,导致无法建立网络连接。

step1: 使用 win + R 快捷键打开 cmd ,输入 regedit 命令打开注册表。

step2: 找到 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters 目录。

step3: 在该目录下添加新的配置项。设置合理的 Keepalive 参数。

step4: 重启windows,配置项生效。

使用JMeter进行简单的压力测试

一、压力测试

顾名思义:压力测试,就是  被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况)。

比如: 2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站是否会奔溃。

二、JMeter简介

JMeter 最早是为了测试 Tomcat 的前身 JServ 的执行效率而诞生的。到目前为止,它的最新版本是3.0,它的测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JMS、Web Service、LDAP等多种对象的测试能力。从 2.1.1 版开始,它还提供了对于 JUNIT 的测试。

JMeter 的安装非常简单,从官方网站上下载,解压之后即可使用。运行命令在%JMETER_HOME%/bin 下,对于 Windows 用户来说,命令是 jmeter.bat。运行前请检查JMeter 的文档,查看是否具备相关的运行条件。JMeter 的主要测试组件总结如下:

1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。

2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。

4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

8. 定时器负责定义请求之间的延迟间隔。

三、使用JMeter进行压力测试

1.新建线程组

必须新建一个Thread Group,  jmeter的所有任务都必须由线程处理,所有任务都必须在线程组下面创建。

image

线程组界面可以配置线程的数量,Ramp-Up Period(in seconds):这个参数是配置这些线程组在多少时间内完全启动(可以把时间设置长点,这样防止一开始就对服务器造成很大压力),还可以配置循环次数,后面还有调度器配置。

image

2.添加http请求

选择线程组 右键 (添加->Sampler -> HTTP 请求):

image

配置域名、端口等信息

image

3.添加Summary Report查看结果

image

4.点击运行

image

5.查看结果

image

Samples -- 本次场景中一共完成了多少个Transaction

Average -- 平均响应时间

Median -- 统计意义上面的响应时间的中值

90% Line -- 所有transaction中90%的transaction的响应时间都小于xx

Min -- 最小响应时间

Max -- 最大响应时间

PS: 以上时间的单位均为ms

Error -- 出错率

Troughput -- 吞吐量,单位:transaction/sec

KB/sec -- 以流量做衡量的吞吐量

以上是关于jmeter 压力测试地址占用的主要内容,如果未能解决你的问题,请参考以下文章

使用JMeter进行简单的压力测试

JMeter压力测试

jmeter压力测试工具使用

badbody结全jmeter进行压力测试

Jmeter 压力测试并输出HTML报告

jmeter---压力测试并发测试吞吐量测试