tcp请求,添加两个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配置信息:请提供具体的jmeter配置信息,例如请求参数、响应数据等,以便更好的了解问题。确保请求参数和响应数据正确无误。可以使用jmeter的响应断言功能,对响应数据进行自动检查,如果出现错误,jmeter会在测试报告中标记错误。
检查网络传输速度:可以使用工具如ping、traceroute等测试网络传输速度是否正常。如果网络传输速度过慢,可能会导致tcp请求响应时间过长。
检查实现代码的效率:在tcp请求的实现代码中,检查是否有耗时操作,是否有不必要的循环等。如果有,需要尽量优化代码,减少耗时操作。
检查日志信息或报错信息:是否有相关的日志信息或报错信息,以便更好的定位问题所在。可以查看jmeter的日志,或者tcp请求实现代码的日志,查看是否有异常信息。
如果以上排查方法都没有解决问题,可以尝试以下方法:
使用wireshark等网络抓包工具,捕获tcp请求和响应的数据包,分析数据包中是否有异常信息,例如重传、超时等。
在jmeter中设置调试模式,可以查看每个tcp请求的具体执行过程,可以更好的定位问题所在。具体步骤是在jmeter的http请求中设置“Print parameters in debug mode”,然后运行测试。
最后,需要注意的是,200状态码并不代表请求成功。只是说明请求已经被服务器接收,并返回了一个响应。具体是否请求成功,需要根据响应报文中的具体信息进行判断。