Jmeter(5.6) TCP二次开发-接口返回500仍然使用长连接

背景


项目背景:终端设备每隔一定时间会发送日志到物联网平台,物联网平台接收日志后,进行处理,分析,得到可用数据。

技术采用:终端设备通过TCP协议发送日志,同一台设备未重启场景下,采用同一个长连接。

测试场景:需要对物联网平台进行性能测试,找出性能瓶颈。采用Jmeter工具,进行性能测试。

在以上背景下,对项目进行性能测试,测试过程中发现并发3000台时,TCP取样器发送失败率50%以上,排查原因:cannot create socket for XXX。于是在网上各种找资料,发现是连接数不够用,按理说服务器设置的TCP连接数有6万多,才并发3000台,而且采用的长连接,不至于不够。

后续,开发人员协助查看发送方的IP地址和端口,发现端口一直在变,也就是说 设置的长连接不起作用。又一通查找原因,原来 jmeter自带机制,TCP请求返回500时,会自动关闭连接。(项目中物联网平台对终端设备就是返回的500,并且没有任何返回值)

于是开启了我的Jmeter二开之路。。。。。

环境准备


JDK

需要安装JDK8以上,此处不做详细描述,大家可自己上网搜索

IntelliJ IDEA

作者采用IntelliJ IDEA工具,具体安装使用教程,可自行搜索

Jmeter源码

下载地址:Index of /dist/jmeter/source

下载完成后,解压到对应目录即可

gradle

下载地址:https://mirrors.cloud.tencent.com/gradle/

将压缩包解压后,需要配置环境变量,以及仓库目录。

用户变量中新建:GRADLE_USER_HOME

系统变量中新建:GRADLE_HOME

path路径中新建:%GRADLE_HOME%\bin

输入gradle -v 查看是否安装成功

Jmeter二次开发


以上环境都OK后,下面开始我们的二开之旅。

1.IDEA中打开jmeter源码项目,如下截图

2.找到对应的文件,修改如下几个地方

3.IDEA配置构建工具。使用本地gradle

4.找到文件目录下的gradle.properties文件,添加如下代码(依赖包下载国内镜像)

buildscript {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
}

5.点击构建项目(由多个入口和按钮,自行选择)

此时:会自动下载所有的依赖包,需要很长时间,请耐心等待。。。

中途遇见问题(当时忙着解决问题,忘记截图了,,,):

1.点击构建后立马报错:Exception java.nio.file.InvalidPathException: Illegal char <>>gradle [in thread “Connection worker“] 

问题原因:使用破解版的IDEA,路径中包含中文导致

解决方案:将IDEA卸载后重新安装即可

2.依赖包下载过程中报(此处报错信息贴的不全):org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':build-logic'. 

Checksum/PGP violations detected on resolving configuration :classpath

问题原因:仔细查看报错信息,发现是 org.gradle.kotlin:gradle-kotlin-dsl-plugins 4.2.1 版本找不到,排查发现所有的checksum.xml中对应的版本都是 4.0.7

解决方案:将所有的checksum.xml 中的版本都换成4.2.1 ,注意<sha512>中的值也需要修改,否则仍会报错

    <dependency group='org.gradle.kotlin' module='gradle-kotlin-dsl-plugins' version='4.2.1'>
      <sha512>A568D32D4EE3EC5FD701267A20CC47AE34069EB589C8FDBFBC558C4FE9AC8A9EAD4901FCBA61E3F4C1BC8F7FFE0ABD9E46061A8B5905539E36CBA471C0468FC0</sha512>
    </dependency>

3.不通过IDEA,直接用命令 gradlew.bat build 构建,即使本机gradle配置完成,也会先下载gradle包,不知道为啥,因此不建议使用此方法

构建完成后,可按如下方式启动Jmeter

可以将打包好的jar包替换本地的,就可以使用了(通常使用时,不下载源码,源码下载不经过构建无法启动Jmeter.修改好的jar包可以给其他同事使用)

成果检验

以上,大功告成!!

特别鸣谢

最后,特别致谢过程中,项目成员开发们的支持与帮助!!

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值