jmeter中tcp请求响能过长问题排查

tcp请求,添加两个tcp请求,第一个是建立连接,第二个是发送数据,但是响应时间过长,这个问题怎么排查,

能建立连接和传输数据吗?还是只是响应时间过长?过长的具体时间是多少?

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7442984
  • 这篇博客你也可以参考下:用jmeter压测tcp
  • 除此之外, 这篇博客: Jmeter tcp压测实践中的 连接一直阻塞 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 运行测试任务发现: 后台正常收到请求、处理并返回数据,但客户端 socket 连接一直被阻塞,无法进行后续请求及统计性能。

    搜索知是因为未配置 「结束符」 所致,只有当客户端在取响应流中读到 「结束符」 才会认为本次业务完成,否则会一直阻塞,直到流被关闭。

    Jmeter 配置文件中关于结束符的描述:

    # eolByte = byte value for end of line
    # set this to a value outside the range -128 to +127 to skip eol checking
    #tcp.eolByte=1000
    

    BinaryTCPClient 源码:

    注意 BinaryTCPClient 的「结束符」配置是: tcp.BinaryTCPClient.eomByte, 与配置文件列的不一样。

    vim /{jmeter}/bin/jmeter.properties
    
    # 添加结束符
    tcp.BinaryTCPClient.eomByte=-128
    

    注意这个配置是10进制的数,需要根据响应报文转化得到。

    再看源码对 「结束符」的判断:

    • useEolByte 只有在值为 -128 ~ +127 之间时才为 true。

    • 对于结束符的判断,只在流的结尾处判断最后一个字节是否与为 配置的值。如果是就结束,不是就继续循环。

    • 如果自己的业务响应报文结尾不符合 -128 ~ +127 这个范围,那么只能在正常报文尾部再添加一个 符合的字节,我们项目就是这种情况。

  • 您还可以看一下 陈槐老师的Jmeter高级性能测试实战课程中的 全面系统讲解工作中最常用取样器之http请求取样器小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我建议你先排查以下几点:

    1. 检查jmeter配置信息:请提供具体的jmeter配置信息,例如请求参数、响应数据等,以便更好的了解问题。确保请求参数和响应数据正确无误。可以使用jmeter的响应断言功能,对响应数据进行自动检查,如果出现错误,jmeter会在测试报告中标记错误。

    2. 检查网络传输速度:可以使用工具如ping、traceroute等测试网络传输速度是否正常。如果网络传输速度过慢,可能会导致tcp请求响应时间过长。

    3. 检查实现代码的效率:在tcp请求的实现代码中,检查是否有耗时操作,是否有不必要的循环等。如果有,需要尽量优化代码,减少耗时操作。

    4. 检查日志信息或报错信息:是否有相关的日志信息或报错信息,以便更好的定位问题所在。可以查看jmeter的日志,或者tcp请求实现代码的日志,查看是否有异常信息。

    如果以上排查方法都没有解决问题,可以尝试以下方法:

    1. 使用wireshark等网络抓包工具,捕获tcp请求和响应的数据包,分析数据包中是否有异常信息,例如重传、超时等。

    2. 在jmeter中设置调试模式,可以查看每个tcp请求的具体执行过程,可以更好的定位问题所在。具体步骤是在jmeter的http请求中设置“Print parameters in debug mode”,然后运行测试。

    最后,需要注意的是,200状态码并不代表请求成功。只是说明请求已经被服务器接收,并返回了一个响应。具体是否请求成功,需要根据响应报文中的具体信息进行判断。