河间米各庄网站建设制作,建设银行网站安全性分析,黄石网站建设,苏州新区网站建设一、request 请求超时设置
timeout 超时时间是可以手动设置的#xff0c;新建一个 http 请求#xff0c;在“高级”设置中找到“超时”设置#xff0c;设置连接、响应时间为2000ms。
1. 请求连接超时#xff0c;连不上服务器。
现象#xff1a;
Jmeter表现形式为…一、request 请求超时设置
timeout 超时时间是可以手动设置的新建一个 http 请求在“高级”设置中找到“超时”设置设置连接、响应时间为2000ms。
1. 请求连接超时连不上服务器。
现象
Jmeter表现形式为前面几个请求是成功的但是后面请求有的会报错有的请求成功
报错1:
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out原因
一般是因为线程太多connection time out error 服务器请求太多了处理不过来。
查看 Load time 的时间要大于 request 设置的 connect time out 时间因此抛出该异常。多是因为服务端有较多请求正在处理且处理时间较长致使 jmeter 不能连接上服务器而产生的。
解决方法设置 jmeter http 请求超时conn重启server
报错2:
Connection timed out: connect工具java.net.ConnectException: Connection timed out: connectat java.net.DualStackPlainSocketImpl.connect0(原因
多是由于端口号耗尽通常一台服务器的端口号最可能是65535个建议使用该命令分别查看下压测机与服务器的端口使用状况netstat -nat|grep -i 8080|wc -l若是这个个数在6w左右那可能就是端口号用尽同时查看下大多数的端口状态应该都是 time_wait 状态。
解决方法若是压测机端口号用尽那就增长压测机使用 jmeter 分布式压测jmeter默认开启keep_alive的
若是数服务器端口号用尽最大的多是服务器端开了短连接把短连接配置变成长链接便可
如果服务器端是短连接当 jmeter 每发起一个请求就会创建一次 tcp 三次握手传输完数据后链接其实没有关链接状态是 time_wait下个请求来了会重新开启一个新的端口创建tcp三次握手传输数据…
这样随着请求的愈来愈多端口就会变得愈来愈少因此端口很快耗尽并且大多数端口都处于 time_wait 状态若是服务器端也支持长链接那么下次请求来了就会在上次请求的通道上继续传输端口使用率大大的下降就有效的避免了端口耗尽问题。常规操作每个请求可以给个超时时间避免 http 超时错误。
2. 连接成功但是读取超时。
等不到服务器返回的数据一般是这次请求查询的量很大比如查了5度的顶点。timeout 小于 server 的最大等待时间read time out error
jmeter等不到服务器返回的数据就断开了请求。
发生该错误时jmeter 已经链接上服务器查看 load time 没有超过设定的 request timeout 时间错误可能的原因是服务器那边未处理该线程的请求或者为保证服务能力断掉了链接。
为了验证该猜测持续大于半小时向服务器发送该并发数量的请求一段时间后request 收到 503 的 response证实猜测。
3. 连接成功server查询数据时超时
是因为2中请求的导致的 server 超时机制如果查询时间超过 30s 自动报错。timeout大于server的等待时间在2的基础上已经设置很大的响应时间了但是还是 timeout这个应该就是 server 等不到数据库返回的数据超时了。
二、压力机自身存在的问题
1.在网络编程中特别是在短时间内新建的网络连接太多经常出现
java.net.BindException: Address already in use: JVM_Bind的异常
Java.NET.BindException: Address already in use: connect原因
短期内新建 socket 操作太多而 socket.close() 操作并不能当即释放绑定的端口而是把端口设置为 time_wait 状态过段时间(默认240s)才释放用netstat -na能够看到最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports 这段区间在1024-5000之间)
解决方法
在运行 jmeter agent 的机器上添加注册表条目
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
MaxUserPort 65334
TcpTimedWaitDelay 30jmeter工具运行设置
cmd中用 regedit 命令打开注册表 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 右键Parameters 新建DWORD值十进制设置为30秒。名称:TcpTimedWaitDelay,值:30。新建DWORD值十进制最大连接数65534。名称:MaxUserPort,值:65534 基数选择十进制以增大可分配的 tcp 连接端口数、减小处于 TIME_WAIT 状态的连接的生存时间 修改配置完毕之后记得重启机器才会生效 jmeter 发送请求后返回java.net.SocketException: Connection reset
这表明是测试服务器有问题可以去页面验证下。有可能是要配置客户端的设置如上面的工具运行设置。
java.net.SocketException: Socket closed
step1:
在 http 请求里面找到高级 implementation 选择 httpclient 4connect设置为15000-300000毫秒。
step2:
在 jmeter 安装目录的 bin 目录下找到 jmeter.properties 并打开。打开425行的注释值设置为1
httpclient4.retrycount 1
httpclient4.idletimeouttime in 1000 msjava.lang.OutOfMemoryError: Java heap space
原因
观察运行 jmeter 机器的内存占用较高超过了 jmeter 设置的内存上限。
解决方案
修改 jmeter 配置文件调整内存可用的范围服务器
修改/bin/jmeter.bat文件找到这2行
set HEAP-Xms256m -Xmx256m
set NEW-XX:NewSize128m -XX:MaxNewSize128m改成
set HEAP-Xms1024m –Xmx2048m最大值不能超过系统内存的1/2
set NEW-XX:NewSize128m -XX:MaxNewSize512m网络{ _t : StringResultObject, status : 1030, message : 服务器发生错误, data : null, isSuccess : false }如遇到上面请求返回的reponse, 就要首先去服务器端的日志通过日志来定位问题
Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host:
原因
分布式测试时server 和 agent 之间的链接有问题。单个机器排查后发现是某个 agent 机器安装了多个网卡rmi 远程的时候找的是虚拟机的网卡致使链接失败。
解决方案
禁掉不使用的虚拟机网卡测试以后再恢复
java.lang.OutOfMemoryError: Java heap space
原因
jmeter 是一个纯 java 开发的工具内存由 java 虚拟机 JVM 管理当内存回收不及时堆内存不足时就会报内存溢出错误。
概念补充
内存泄露应用使用资源之后没有及时释放导致应用内存中持有了不需要的资源。
内存溢出应用的内存已经不能满足正常使用了堆栈已经达到系统设置的最大值进而导致崩溃。
通常都是由于内存泄露导致堆栈内存不断增大从而引发内存溢出。对 jmeter 而言也是如此jmeter 测试过程中如果内存溢出的话一般会出现上面的提示java.lang.OutOfMemoryError: Java heap space意思就是堆内存溢出不够用了
解决方法
知道了报错出现的原因是因为堆内存大小不足引起的自然而然就会想到内存溢出的解决方法调整堆内存大小。
步骤以Windows系统为例Linux系统类似
打开jmeter.bat文件按关键字“HEAP”搜索把原来的配置改为如下修改前
if not defined HEAP (rem See the unix startup file for the rationale of the following parameters,rem including some tuning recommendationsset HEAP-Xms1g -Xmx1g -XX:MaxMetaspaceSize256m
)
)修改后
if not defined HEAP (rem See the unix startup file for the rationale of the following parameters,rem including some tuning recommendationsset HEAP-Xms512m -Xmx4000mset NEW-XX:NewSize256m -XX:MaxNewSize512m)
set HEAP-Xms512m -Xmx4000m调整堆内存的大小set NEW-XX:NewSize256m -XX:MaxNewSize512m调整堆内存中新生带的大小
PS
这个值不是越大越好要根据压测使用的机器而定一般而言堆内存的最大值不要超过物理内存的一半否则容易导致 jmeter 运行变慢、卡顿甚至内存溢出因为java本身的垃圾回收机制是动态分配内存调整的时候其本身会占用很多内存NEW分配的内存不宜太大。
修改完成后保存重启JMeter即可生效。
三、小结 这种修改堆大小的方法只适用一部分情况并不是万能的当需要模拟的线程数较大时就需要根据具体情况采用分布式压测的方式了。
命令行运行 jmeter 时一定要禁用“查看结果树”、“聚合报告”等监听器因为真的真的真的很消耗内存。
磁盘监控工具有iostat htop
网络监控工具有iftop
查看网络连接情况可以使用netstat -n | find /I “established” /c
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你