jmeter 压测问题

jmeter 压测问题

————

————

java.net.BindException: Address already in use: connect

原因:

操作系统会为TCP/IP服务预留临时端口,Jmeter在跑并发测试的时候每开启一个线程(new socket操作)就会占用一个临时端口,若TCP/IP端口被占完了,而且没有及时释放(socket.close()操作不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间才会真正释放,默认是240s),就会出现Java.net.BindException: Address already in use: connect这种情况

解决办法(在jmeter所在服务器操作):

从问题的原因分析,有两种解决方案,一是增加预留给TCP/IP服务的临时端口的数量,二是加快被占用端口的释放速度。

增加预留给TCP/IP服务的端口数量。

1.1 如果Jmeter的运行平台在Windows端。

在 Microsoft Windows XP 或 Windows Server 2003 中,由 Windows 套接字分配给应用程序的临时 TCP 或 UDP 端口号的最大值是由注册表设置 MaxUserPort 控制的,该参数的默认值为 5000。临时端口从端口号 1025 开始编号。因此,默认情况下,Windows XP 或 Windows Server 2003 会为执行通配绑定的应用程序分配一个范围从 1025 到 5000 的号码。

要在运行 Windows XP 或 Windows Server 2003 的计算机上更改临时端口的最大值,请执行以下操作:

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

2、在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

3、右键Parameters

4、添加新的DWORD,名字为MaxUserPort和TcpTimedWaitDelay

5、分别输入数值数据为65534和30,基数选择十进制;以增大可分配的tcp连接端口数、减小处于TIME_WAIT状态的连接的生存时间

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

TcpTimedWaitDelay:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。

1.2 调高你的web服务器的最大连接线程数,调到1024或者2048,以resin为例,修改resin.conf中的thread-pool.thread_max,如果你采用apache连resin的架构,别忘了再调整apache;

https://blog.csdn.net/gzh0222/article/details/6911676

java.net.NoRouteToHostException: 无法指定被请求的地址

linux

解决方法:

  1. 调低端口释放后的等待时间, 默认为60s, 修改为15~30s

​ echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout

  1. 修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0, 修改为1, 释放TIME_WAIT端口给新连接使用。

​ echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

  1. 修改tcp/ip协议配置,快速回收socket资源, 默认为0, 修改为1.

​ echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

输入sysctl -p即生效

Linux TCP连接数修改: https://www.cnblogs.com/clicli/p/5856486.html,https://www.cnblogs.com/cwp-bg/p/8377742.html

查看端口占用 netstat -natp|grep 9000 | grep ESTABLISHED | wc -l

优化

net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 40000
net.core.somaxconn = 40000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_keepalive_time = 1200

java.net.SocketException: Socket closed

https://www.cnblogs.com/yiyaxuan/p/12673496.html

如果在 HTTP Request Sampler 的 Basic 里勾选了Use KeepAlive,那么建议在 Advanced 页签下:

1、Implementation 选为 HttpClient4

2、Timeouts 中的 Connect 一般设置一个10~60秒的值,表示连接的空闲超时时间,避免由于没收到被压测端的响应回来的 Keep-Alive 的 Header 导致的连接断开

这个值的单位是毫秒:15s*1000=15000s

img

通过上述方法设置后,再次压测,还是会出现这个错误

img

java.net.SocketException: Connection reset

In user.properties file add the next 2 lines:

httpclient4.retrycount=1
hc.parameters.file=hc.parameters
In hc.parameters file add the following line:

http.connection.stalecheck$Boolean=true
Both files live in JMeter’s bin folder.

linux运行

jmeter -n -t ./testcase/rsa.jmx -l ./testcase/rsa.jtl

动态修改

(jmeter.bat -help | jmeter.sh -help可以看到帮助),使用__P() 函数来获取命令中指定的属性值。

jmeter -JthreadCount=2 -JRanpup=1 -Jcycle=2 -Jtime=40 -Durl=www.baidu.com -Dport=80 -n -t baidu.jmx -l baidu.jtl

说明:

threadCount=2为baidu.jmx测试计划要指定的线程数

-Jcycle=2为baidu,jmx测试计划要指定的每个线程的迭代次数

-JRanpup=1为baidu,jmx测试计划要指定的线程启动时间

在baidu.jmx测试计划中用${__P(threadCount,)}来获取threadCount的值

${__P(cycle,)}来获取cycle的值

${__P(time,)}获取持续时间

${__property(url,)}获取服务器ip

img img

login 没带cookie 回来

decorator.go(71) invoke err: rpc error: code = Unknown desc = delete session failed

rsa没带公钥回来

定位到sync.map

http://c.biancheng.net/view/34.html

测 sync.map

线程数循环次数总样本量响应次数
2002004000040000
2003006000060000
2004008000063008
4004001600079949
50040020000101823
1000400400000182616
1200400480000240249
当单台Mac进行压测时,如果压测客户端Jmeter启动超过2000个线程,而Jmeter报OOM(Out of Memory)错误,有一些解决方法可以尝试。 首先,你可以尝试增加Jmeter的内存限制。可以通过编辑Jmeter的启动脚本来指定更大的堆内存大小,即增加-Xmx参数的值。例如,将-Xmx2g修改为-Xmx4g,表示将堆内存限制增加到4GB。 其次,你可以调整Jmeter的线程配置。在Jmeter中,每个线程都会消耗一定的内存资源。如果单台Mac的内存无法满足启动2000个线程的需求,可以考虑减少线程数,或者将压测任务分散到多台机器上进行。 另外,你也可以检查是否有其他资源导致内存不足。例如,Jmeter执行过程中可能会产生大量的日志文件,如果磁盘空间不足,也会导致OOM错误。此时,可以清理或增加磁盘空间。 最后,你可以使用Jmeter插件来优化压测性能。例如,引用中提到的自行开发的RocketMQ插件可以帮助更好地进行RocketMQ的压测。使用合适的插件可以提高效率,减少资源消耗。 综上所述,为了解决Jmeter压测时发生OOM错误的问题,你可以尝试增加Jmeter的内存限制、调整线程配置、检查其他资源是否充足,以及使用合适的插件来优化压测性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [7个常见的Jmeter压测问题总结](https://blog.csdn.net/okcross0/article/details/129148522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Jmeter压测问题](https://blog.csdn.net/weixin_44370919/article/details/108864324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [jmeter压测RocketMQ的插件](https://download.csdn.net/download/weixin_40126600/85011909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值