Jmeter 自动化性能测试常见问题汇总

news2025/2/28 19:43:05

一、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: connect
 at 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 30

jmeter工具运行设置:

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 4,connect设置为15000-300000毫秒。

step2:

在 jmeter 安装目录的 bin 目录下,找到 jmeter.properties 并打开。打开425行的注释,值设置为1:

httpclient4.retrycount = 1
httpclient4.idletimeout=<time in 1000 ms>

java.lang.OutOfMemoryError: Java heap space

原因:

观察运行 jmeter 机器的内存,占用较高,超过了 jmeter 设置的内存上限。

解决方案:

修改 jmeter 配置文件,调整内存可用的范围服务器

修改/bin/jmeter.bat文件:找到这2行

set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m

改成:

set HEAP=-Xms1024m –Xmx2048m(最大值不能超过系统内存的1/2)
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m网络
{ "_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 recommendations
 
    set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
)
)

修改后:

if not defined HEAP (
 
    rem See the unix startup file for the rationale of the following parameters,
 
    rem including some tuning recommendations
 
    set HEAP=-Xms512m -Xmx4000m
 
    set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m

)
set HEAP=-Xms512m -Xmx4000m:调整堆内存的大小

set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m:调整堆内存中新生带的大小

PS:

这个值不是越大越好,要根据压测使用的机器而定,一般而言,堆内存的最大值不要超过物理内存的一半,否则容易导致 jmeter 运行变慢、卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,调整的时候其本身会占用很多内存),NEW分配的内存,不宜太大。

修改完成后保存,重启JMeter,即可生效。

三、小结

 这种修改堆大小的方法只适用一部分情况,并不是万能的,当需要模拟的线程数较大时,就需要根据具体情况采用分布式压测的方式了。

命令行运行 jmeter 时,一定要禁用“查看结果树”、“聚合报告”等监听器,因为真的真的真的很消耗内存。

磁盘监控工具有iostat & htop

网络监控工具有iftop

查看网络连接情况可以使用netstat -n | find /I “established” /c 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机竞赛 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

【AIGC】Stable Diffusion Prompt 每日一练0915

一、前言 1.1 写在前面 本文是一个系列&#xff0c;有点类似随笔&#xff0c;每天一次更新&#xff0c;重点就Stable Diffusion Prompt进行专项训练&#xff0c;本文是第一篇《Stable Diffusion Prompt 每日一练0915》。 1.2 项目背景 stable diffusion提示词(prompt)是用于…

[vue问题]开发中问题集合

“TypeError: Cannot read property ‘Request’ of undefined” 这是测试文件的报错&#xff0c;最后发现是因为项目启动的时候就报错了&#xff0c;是其它错误导致的&#xff0c;所以测试文件才会提示这种错误&#xff0c;当启动报错修复后&#xff0c;该问题没有了 热加载…

Acwing算法心得——猜测短跑队员的速度(重写比较器)

大家好&#xff0c;我是晴天学长&#xff0c;今天的算法题用到了比较器的知识&#xff0c;是经常会用到的一个知识点&#xff0c;常见与同种数据的排序&#xff0c;需要的小伙伴请自取哦&#xff01;如果觉得写的不错的话&#xff0c;可以点个关注哦&#xff0c;后续会继续更新…

什么是函数式编程(functional programming)?在JavaScript中如何实现函数式编程的概念?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 函数式编程&#xff08;Functional Programming&#xff09;⭐ 纯函数&#xff08;Pure Functions&#xff09;⭐ 不可变性&#xff08;Immutability&#xff09;⭐ 高阶函数&#xff08;Higher-Order Functions&#xff09;⭐ 函数组合&…

jq命令安装与使用

目录 一、简介二、下载及安装1.Linux 安装2.Windows 安装3.测试安装结果 三、jq用法1.基本语法2.常见用法1&#xff09;格式化 JSON2&#xff09;获取属性3&#xff09;属性不存在情况处理4&#xff09;数组遍历、截取、展开5&#xff09;管道、逗号、加号6&#xff09;数据构造…

长话短说 CopyOnWrite 思想及其应用场景

长话短说 CopyOnWrite 思想及其应用场景。 CopyOnWrite(写入时复制)思想 CopyOnWrite(简称COW,中文意思是:写入时复制)就是在进行写操作时,先复制要改变的对象,对副本进行写操作,完成对副本的操作后,把原有对象的引用指向副本对象。 CopyOnWrite采用了读写分离的思想…

Day45:Element-Plus

Vue生态中包含了大量优秀的组件库&#xff0c;经过快速的学习&#xff0c;我们就能把这些现成的组件应用到自己的项目中了 1.常见组件库 UI组件库需要基于JS框架来实现&#xff0c;也就是说我们现在学习的是Vue3&#xff0c;也需要选择适配的组件库&#xff0c;在Vue生态中&a…

C++QT day6

1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 128 using namespace std; template<typename T> class Stack_s { private:T *pnew T[MAX];//栈的数组int top;//记录栈顶的变量 public://构造函数Stack_s(int t…

数据结构--平衡二叉树

目录 平衡二叉树定义 平衡二叉树的插入 调整最小不平衡子树 LL型 RR型 LR型​编辑 RL型​编辑 练习 查找效率分析​编辑 回顾知识点 平衡二叉树的删除 例1 ​编辑 例2​编辑 例3 例4​编辑 ​编辑 平衡二叉树的删除回顾​编辑 定义插入操作插入新结点后如何调…

SoundSource 5 for Mac:专业音频控制器,让您的Mac听觉体验更出色

对于使用 Mac 的用户而言&#xff0c;拥有一个强大的音频控制工具是非常重要的。SoundSource 5 for Mac 是 Rogue Amoeba 公司开发的一款专业的音频控制器&#xff0c;它提供了丰富的功能和优秀的性能&#xff0c;让您能够轻松管理并优化Mac上的音频设置。 首先&#xff0c;So…

腾讯mini项目-【指标监控服务重构】2023-08-12

今日已办 Watermill Handler 将 4 个阶段的逻辑处理定义为 Handler 测试发现&#xff0c;添加的 handler 会被覆盖掉&#xff0c;故考虑添加为 middleware 且 4 个阶段的处理逻辑针对不同 topic 是相同的。 参考https://watermill.io/docs/messages-router/实现不同topic&am…

DS相关题目

DS相关题目 题目一&#xff1a;消失的数字 拿到这道题目之后&#xff0c;首先可以想到的一个解题方法就是&#xff0c;我们可以先排序&#xff0c;排完序之后&#xff0c;这个数组其实就是一个有序的数组了&#xff0c;那只用比较数组中的每一个元素和他对应的下标是不是相等的…

Day46-50:统计图表项目总结

建项 项目需求写法——可视化报表 可视化报表项目效果 开源表格样式库阿帕奇 绘制echarte图标的流程 在视图中放置一个容器&#xff0c;这个容器需要有一个固定的宽高获取容器&#xff0c;调用init方法&#xff0c;初始化echarts实例 let container document.querySelec…

stm32----ADC模数转换

一、ADC介绍 ADC&#xff0c;即模数转换器&#xff0c;它可以将模拟信号转化为数字信号。在stm32种一般有3个ADC&#xff0c;每个ADC有18个通道。 12位ADC是一种逐次逼近型模拟数字转换器&#xff0c;它有多达18个通道&#xff0c;可测量16个外部和两个内部信号源。各个通道的A…

jquery设置图片可手动拖拽

JQuery是一款流行的JavaScript框架&#xff0c;可以轻松实现网页交互效果。而其中一种常见效果是图片手动拖拽。以下是设置图片手动拖拽的JQuery代码。 $(document).ready(function() { var isDragging false; var mousePos { x: 0, y: 0 }; var elemPos { x: 0, y: 0 }; v…

Apache Spark 在爱奇艺的应用实践

01 Apache Spark 在爱奇艺的现状 Apache Spark 是爱奇艺大数据平台主要使用的离线计算框架&#xff0c;并支持部分流计算任务&#xff0c;用于数据处理、数据同步、数据查询分析等场景&#xff1a; 数据处理&#xff1a;在数据开发平台中支持开发者提交 Spark Jar 包任务或Spar…

elasticsearch2-es和kibana的安装

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

第 113 场 LeetCode 双周赛题解

A 使数组成为递增数组的最少右移次数 数据范围小直接模拟… class Solution { public:int minimumRightShifts(vector<int> &nums) {for (int op 0; op < nums.size(); op) {if (is_sorted(nums.begin(), nums.end()))//nums是否已经有序return op;rotate(nums.b…

zerotier-client

title: “zerotier-client” createTime: 2022-10-10T11:50:5108:00 updateTime: 2022-10-10T11:50:5108:00 draft: false author: “zcb” tags: [“zerotier-plant”,“zerotier-client”,“zerotier”] categories: [“zerotier”] description: “测试的” 1.windows 1.1…