字节8年经验之谈 —— Jmeter自动化性能测试常见问题!

news2024/12/24 20:22:16

一、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的)

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

  若是数服务器,端口号用尽,最大的多是服务器端开了短连接,把短连接配置变成长链接便可

  如果服务器端是短连接,当 jmeter 每发起一个请求就会创建一次 tcp 三次握手,传输完数据后,链接其实没有关,链接状态是 time_wait,下个请求来了会重新开启一个新的端口,创建tcp三次握手,传输数据....

  这样随着请求的愈来愈多,端口就会变得愈来愈少,因此端口很快耗尽,并且大多数端口都处于 time_wait 状态,若是服务器端也支持长链接,那么下次请求来了,就会在上次请求的通道上继续传输,端口使用率大大的下降,就有效的避免了端口耗尽问题。常规操作,每个请求可以给个超时时间,避免 http 超时错误。

 2. 连接成功,但是读取超时。

  等不到服务器返回的数据,一般是这次请求查询的量很大,比如查了5度的顶点。(timeout 小于 server 的最大等待时间)read time out error

  jmeter等不到服务器返回的数据就断开了请求。

  Response code: Non HTTP response code: java.net.SocketTimeoutException

  Response message: Non HTTP response message: Read timed out

  发生该错误时,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工具运行设置:

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

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

  3. 右键Parameters

  4. 新建DWORD值,(十进制)设置为30秒。名称:TcpTimedWaitDelay,值:30。新建DWORD值,(十进制)最大连接数65534。名称:MaxUserPort,值:65534

  5. 基数选择十进制;以增大可分配的 tcp 连接端口数、减小处于 TIME_WAIT 状态的连接的生存时间

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

  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系统类似):

  1. 打开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分配的内存,不宜太大。

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

三、小结

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

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

  3. 磁盘监控工具有iostat & htop。

  4. 网络监控工具有iftop。

  5. 查看网络连接情况可以使用netstat -n | find /I "established" /c。


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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

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

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

相关文章

Chrome更新

前端开发在调试过程中&#xff0c;经常需要各种不同的数据来反复调试&#xff0c;所以我们前端程序员会经常在脚手架中集成 mock 或者通过代理的方式去hack的实现&#xff0c;但是现在再也不用这么麻烦了&#xff0c;Chrome 117 原生就支持了&#xff0c;而且体验相当丝滑。 他…

优维产品最佳实践:主机合规性检查

我们常常会感到这样的困惑&#xff0c;为什么这么多的无效主机记录&#xff0c;为什么这些主机很多信息空白&#xff0c;当许多人一起维护主机信息时&#xff0c;常常会出现信息错漏的情况。主机是运维最重要最基本的CMDB信息&#xff0c;而「合规性检查」为我们提供了更高效便…

【Ubuntu18.04】Autoware.ai安装

Autoware.ai安装 引言1 ROS安装2 Ubuntu18.04安装Qt5.14.23 安装GCC、G4 Autoware.ai-1.14.0安装与编译4.1 源码的编译4.1.1 python2.7环境4.1,2 针对Ubuntu 18.04 / Melodic的依赖包安装4.1.3 先安装一些缺的ros依赖4.1.4 安装eigen3.3.74.1.5 安装opencv 3.4.164.1.6 编译 4.…

crypto:看我回旋踢

题目 下载压缩包后解压可得到提示文本 经过观察&#xff0c;synt{}这个提示与flag{}形式很像 由题目名中的回旋可以推测为凯撒密码&#xff0c;由凯撒密码的定义可知&#xff0c;需要先推出移位数&#xff0c;s->f数13次&#xff0c;因此移位数为13&#xff0c;解码可得

uniapp ssr发行后一直Hydration completed but contains mismatches Cannot find module

最开始我用前端网页托管的地址访问一直是 Hydration completed but contains mismatches 解决方案 要从云函数的地址访问项目。 先绑定域名&#xff0c;否则用uniapp自带地址访问一直是下载文件 设置路径 最后效果 uniapp ssr 云函数访问 MODULE_NOT_FOUND:Cannot fin…

浅谈! 几种 SpringBoot/SpringCloud 开源项目

简介 SpringBoot 是一个非常流行的 Java 框架&#xff0c;它可以帮助开发者快速构建应用程序。他不仅继承了 Spring 框架原有的优秀特性&#xff0c;而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。 最近&#xff0c;小编蹲点各大开源网站、社区等&…

什么是Jmeter ?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚…

实现爬虫加速的可实现办法

网络爬虫在数据采集和信息监测中发挥着重要作用。然而&#xff0c;由于网络环境复杂和大量数据需求&#xff0c;爬虫速度可能面临挑战。本文将为您分享一些实现爬虫加速的可行方法&#xff0c;帮助您让爬虫快如闪电&#xff01;让我们一起探索吧&#xff01; 一、多线程并发请…

Linux查看哪些进程占用的系统 buffer/cache 较高 (hcache,lsof)命令

1、什么是buffer/cache &#xff1f; buffer/cache 其实是作为服务器系统的文件数据缓存使用的&#xff0c;尤其是针对进程对文件存在 read/write 操作的时候&#xff0c;所以当你的服务进程在对文件进行读写的时候&#xff0c;Linux内核为了提高服务的读写速度&#xff0c;则将…

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著想象和世界一样宽广

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著想象和世界一样宽广

微信如何一次自动回复多条信息?

微信已经成为了我们在工作中不可或缺的通讯工具&#xff0c;但是由于微信平台并没有开放自动回复和快捷回复等方便的功能&#xff0c;一旦咨询大量增加&#xff0c;就会出现回复不及时的情况。这会对客户的满意度造成影响&#xff0c;降低客户转化率&#xff0c;甚至导致客户流…

STL库——string类的常见使用

一、基本介绍 1.string类是STL库里面比较常见的一个数据结构&#xff0c;string是表示字符串的字符串类 &#xff0c;该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作。 2.string在底层实际是&#xff1a;basic_string模板类的别名…

全自动情感故事对话视频生成神器

搞笑聊天视频是近年来备受欢迎的一种娱乐形式&#xff0c;它能够快速、简单地制作出形象生动、幽默搞笑的对话视频&#xff0c;给人带来欢乐与笑声。而今天&#xff0c;我要向大家介绍的是一款功能强大、操作简单的搞笑聊天视频生成器。 这款聊天视频生成器具备多项令人惊叹的…

Linux内核之内存管理分段机制原理与实现(从无到有的过程)

1. 分段机制概述 对于分段机制&#xff0c;要从Intel的微处理器的8086开始说起&#xff0c;刚开始内存空间比较小&#xff0c;内存寻址采用的是直接访问物理地址的方式。由于技术的发展&#xff0c;计算机做的事情越来越多&#xff0c;程序也越来越大&#xff0c;为了更大的内…

重生奇迹MU游戏开店技巧

重生奇迹游戏开店攻略 在游戏之中有很多炫酷的玩法&#xff0c;而且还有存在很多奇怪的现象&#xff0c;很多玩家喜欢在游戏之中充当商人&#xff0c;然后在游戏之中开店卖一些东西&#xff0c;或者是倒卖一些物品。 从买卖物品之中赚取一定差价&#xff0c;的确这样可以为玩…

Jetsonnano B01 笔记8:屏幕分辨率的调整

最近我的jetson 被学弟借用学习了一阵子&#xff0c;他在一顿捯饬后&#xff0c;成功将我的屏幕分辨率改成了一个阴间的水平&#xff0c;十分影响操作学习。 终端命令更改分辨率&#xff1a; 我们可以打开终端&#xff0c;输入以下命令来更改分辨率&#xff0c;但这样做有一个…

6个基于DSPM组件的使用案例

在这个信息技术时代&#xff0c;企业必须应对日益增长的生成和保护大量数据的需求。这就是为什么制定广泛而有效的策略来处理和保护这些数据比以往任何时候都更加重要的原因。数据安全状况管理 &#xff08;DSPM&#xff09; 是一种解决方案&#xff0c;可帮助现代组织实施全面…

Unity 2021.x及以下全版本Crack

前言 最近Unity那档子事不出来了吗&#xff0c;搞得所有人都挺烦的&#xff0c;顺便在公司内网需要我完成一个游戏的项目&#xff0c;就研究了一下如何将Unity给Crack掉。 注意所有操作应有连接外网的权限 以我选择的版本为例&#xff0c;我使用的是Unity 2021.3.5f1与Unity…

【HarmonyOS】解决API6 WebView跳转外部浏览器问题、本地模拟器启动黑屏

【问题描述1】 HarmonyOS API6 Java开发中使用WebView组件&#xff0c;如果网页中有跳转链接&#xff0c;点击会跳转到手机系统浏览器。 【解决方案】 解决这个问题的方法就是给WebView这种自定义的WebAgent对象。具体代码如下&#xff1a; WebConfig webConfigthis.webView…

甲骨文创新中心与正初为职教集团达成人才培养合作,探索数实结合产教融合模式

2023年9月20日&#xff0c;甲骨文&#xff08;南京&#xff09;人工智能创新中心&#xff08;以下简称“甲骨文创新中心”&#xff09;与正初为职教集团在南京举行了战略合作签约仪式。甲骨文创新中心正式宣布和正初为职教集团达成职业教育数实结合产教融合合作协议&#xff0c…