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: 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等不到服务器返回的数据就断开了请求。
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。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
相关文章:
jmeter性能测试常见的一些问题
一、request 请求超时设置 timeout 超时时间是可以手动设置的,新建一个 http 请求,在“高级”设置中找到“超时”设置,设置连接、响应时间为2000ms。 1. 请求连接超时,连不上服务器。 现象: Jmeter表现形式为ÿ…...
利用国外 vps 为 switch 设置代理服务器加速游戏下载
switch 在国内通过 wifi 连网后如果直接下载游戏的话速度特别慢,据说要挂一个晚上才能下载成功一个游戏。当我尝试下载时发现进度条基本不动,怀疑软件源是在国外的原因,于是想到可以通过国外 vps 代理中转的方式。具体步骤如下(以…...
云计算安全的新挑战:零信任架构的应用
文章目录 云计算的安全挑战什么是零信任架构?零信任架构的应用1. 多因素身份验证(MFA)2. 访问控制和策略3. 安全信息和事件管理(SIEM)4. 安全的应用程序开发 零信任架构的未来 🎉欢迎来到云计算技术应用专栏…...
基于SSM的药房药品采购集中管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
【GIT版本控制】--远程仓库
一、连接远程仓库 连接到远程仓库是在GIT中进行协作和备份的关键步骤。以下是连接到远程仓库的基本步骤: 获取远程仓库的URL:首先,你需要获得远程仓库的URL。通常,这是远程仓库提供给你的,可以是HTTPS或SSH URL。例如…...
1:Allotment,2:FeeSell,3:混合Allotment+FreeSell
根据您的描述,这似乎是与酒店预订相关的三种不同的方式。下面是对这三种方式的解释: Allotment(配额):这是一种酒店预订方式,其中您可以与酒店签订协议,并购买其一定数量的房间或床位。在此之后…...
NFT Insider#110:The Sandbox与TB Media Global合作,YGG Web3游戏峰会阵容揭晓
引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类࿰…...
在硅云上主机搭建wordpress并使用Astra主题和avada主题
目录 前言 准备 操作 DNS解析域名 云主机绑定域名 安装wordpress网站程序 网站内Astra主题设计操作 安装主题 网站内avada主题安装 上传插件 上传主题 选择网站主题 前言 一开始以为云虚拟主机和云服务器是一个东西,只不过前者是虚拟的后者是不是虚拟的…...
基于SSM+Vue的物流管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:VueHTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 …...
【洛谷】P1114 “非常男女”计划
思路:思路和上一篇一模一样哒~(这里就不多解释啦) ACcode: #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N 2e510; int n,a[N],f[N]; int main() { ios::sync_with_st…...
list中符合 多条件中筛选符合条件的值
//查找身高在1.8米及以上的男生 // List<SsxlwdBean> boys list.stream().filter(s->s.getGender() && s.getHeight() > 1.8).collect(Collectors.toList()); xlseachitem list.stream().filter(list->list.xlname.contains(Upstrquery)||list.xlbm.…...
Amber中的信息传递——章节1.2-第三部分
程序列表 Amber 包含大量旨在帮助您进行化学系统计算研究的程序,而且发布的工具数量还在定期增加。 本节列出了 AmberTools 包含的主要程序。 这里列出了套件中包含的每个程序,并简要介绍了其主要功能,同时提供了相关文档参考。 对于大多数程…...
【嵌入式】常用串口协议与转换芯片详解
文章目录 0 前言1 一个通信的协议的组成2 常用协议名词解释2.1 UART2.2 RS-2322.3 RS-4852.4 RS-422 3 常用的芯片3.1 MAX2323.2 CP21023.3 CH3403.4 FT232 0 前言 最近有点想研究USB协议,正好也看到有评论说对如何选择USB转串口模块有些疑惑,其实我也一…...
缓存与数据库双写一致性问题解决方案
其实如果使用缓存,就会出现缓存和数据库的不一致问题,关键在于我们可以接受不一致的时间是多少,根据不同的需求采取不同的实现方案。 第一种:先更新数据库后更新缓存 做法简单,但是并发写情况下,会出现数…...
Java中的transient关键字是什么意思?
Java中的transient关键字是什么意思? 在Java中,transient 是一个关键字,用于修饰实例变量(成员变量)。当一个实例变量被声明为transient 时,它的值不会被持久化(即不会被序列化)。 …...
内存溢出和内存泄漏
内存溢出和内存泄漏 内存溢出 内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。由于GC一直在发展,所以一般情况下,除非应用程序占用的内存增长速度非常快…...
Java数组:没错,不装了我就是书架。
👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、数组的概念1、什么是数组?2、数组的创建3、数组的初始化Ⅰ、动态初始化Ⅱ、静态初始化 二、数组的使用1、数组中…...
轻量级接口自动化测试框架
大致思路: jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行. 环境安装: 1.jdk1.7 配置环境变量(参考前面的分页) 2.jmeter解压到本地,ant解压到本地 3.Ant解压到本地,并配置环境变量 ANT_HOME:D:\jmeter\apache-ant-1.9.6 P…...
.some方法、vh、多列布局、DNS域名解析过程、空页面文字内容渲染
nodeEndTime.some((time) > !!time) 这个方法主要用来判断nodeEndTime这个数组中是否有至少一个非假值的元素。它会遍历 nodeEndTime 数组中的每个元素,如果至少有一个元素是真值(不是 null、undefined、0、false 或空字符串等假值&#x…...
Eclipse iceoryx™ - 真正的零拷贝进程间通信
1 序言 通过一个快速的背景教程,介绍项目范围和安装所需的所有内容以及第一个运行示例。 首先:什么是冰羚? iceoryx是一个用于各种操作系统的进程间通信(IPC)中间件(目前我们支持Linux、macOS、QNX、FreeBS…...
【C++】面向对象编程(二)面向对象的编程思维:virtual虚拟调用、继承、protected成员、派生类与基类
默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,需要在成员函数的声明前加上关键字virtual: //LibMat声明表示,其析构函数和print()函数皆为虚函数 class LibMat{ public:LibMat(){c…...
【古谷彻】算法模板(更新ing···)
目录 一、数学 1、逆元 (一)费马小定理/欧拉定理(快速幂) 2、组合数 (1)求组合数C(n,m) 方法一:阶乘+逆元+快速幂求组合数 方法二:记忆化搜索 方法三:递推公式 (2)组合数求概率 3、高精度sqrt (1)二分法 (2)递加递减 4、快速幂 5、欧拉函数 方法一:…...
Day-06 基于 Docker 安装 Nginx 镜像
1.去官方公有仓库查询nginx镜像 docker search nginx 2.拉取该镜像 docker pull nginx 3. 启动镜像,使用nginx服务,代理本机8080端口(测试是不是好使) docker run -d -p 8080:80 --name nginx-8080 nginx docker ps curl 127.0.0.1:8080...
k8s集群-7 service
工作负载的应用是如何暴露出去的 解决访问问题 Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。 service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现) service的类型: C…...
JS进阶-防抖和节流
防抖(debounce) 单位时间内,频繁触发事件,只执行最后一次。 例子:王者荣耀回城,只要被打断就需要重新来 使用场景: 1)搜索框搜索输入。只需用户最后一次输入完,再发送…...
踩坑日记 uniapp 底部 tabber遮挡住购物车结算
tabbar 被购物车结算遮挡 在小程序上tabbar没有将固定栏遮挡,如果直接调高,浏览器H5页面是对了,但在小程序上面离底部的定位就太高了 原代码 // 底部结算样式.shop-foot {border-top: 2rpx solid #F7F7F7;background-color: #FFF;position: …...
【MySQL】表的约束(一)
文章目录 为什么要有约束一. 空属性二. 默认值三. 列描述四. zerofill结束语 为什么要有约束 数据库是用来存放数据的,所以其需要保证数据的完整性和可靠性 数据类型也算是一种约束,比如,整型的数据无法插入字符型。 通过约束,让…...
Excel宏管理库存清单
1. 开启宏: - 打开 Excel - 选择 “文件” > “选项” > “自定义功能区” > “开发工具” ,将其添加到功能区。 - 返回Excel界面,点击 “开发工具” 选项卡。 2.准备你的库存清单: - 在一个新的工作表中创建你的库存清单。…...
C语言练习百题之排序算法
题目:C语言实现排序算法 冒泡排序 思路: 依次比较相邻的元素,如果顺序不对则交换,直到整个数组有序。 实现代码: #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j…...
通过ElementUi在Vue搭建的项目中实现CRUD
🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…...
dw里响应式网站怎么做/武汉seo收费
安装[rootzdw ~]# yum -y install lrzszrz是上传sz下载转载于:https://blog.51cto.com/zhaodongwei/1758362...
网站设计与制作教程/安康地seo
命令执行代码是指使用编程语言编写的程序,用于执行特定的系统命令。它可以在不同的平台上使用不同的语言编写,如在Windows上使用C#或Visual Basic,在Linux上使用Python或Bash。...
重庆网站建设制作公司/日本积分榜最新排名
响应式编程在Android中的应用...
重庆市城乡建设委员会子网站/惠州seo快速排名
原文地址:微服务面试相关内容了解下~(一) 1、微服务是什么? 微服务,又是微服务架构,是一种架构风格,将应用程序构建成以业务领域为模型的小型自治服务集合。 以蜜蜂通过对齐六角形蜡细胞构建…...
wordpress编辑器不能用/日本网站源码
我在C#中编写了一个应用程序来自动登录到网页.只要Admin运行可执行文件,它就能完美运行.每当非管理员运行项目时,就好像IEDriver.exe没有启动一样.从组策略启动IEDriver.exe没有任何限制.private IWebDriver _driver;public void SetUp(){InternetExplorerOptions options new…...
ps做游戏下载网站有哪些/百度搜索量统计
泛型介绍(C# 编程指南)泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用在集合和在集合上运行的方法中。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic&…...