Java性能调优/测试工具长连接检测

技术文档网 2021-04-20

测试工具长连接检查

HTTP 长连接

HTTP1.1规定里默认保持长连接(HTTP persistent connection,又翻译为持久连接),数据传输完成了保持TCP连接不断开,等待在同域名下继续使用这个通道传输数据,相反就是短连接。

同时,长连接并不是无限期的保持,会有一个限制,比如一个连接的最大请求次数或超时时间。

另外,TCP的keep alive是检查当前TCP连接是否活着;HTTP的Keep-alive是要让一个TCP连接活久点。

根据以上,我们可以有以下结论:

  1. 短连接中每个连接只有一个请求与响应,长连接中每个连接有多个请求与响应
  2. HTTP 的长连接不一定表示 TCP连接的端口号不会变化,而是应该通过连接是否被复用来判断。对于这点,我们使用抓包工具(wireshark)观察。
  3. HTTP 的长连接不会太长时间保持,会有一个断开的机制。

Apache ab

在 Apache ab 中存在指令 -k ,用于启动 HTTP keep-alive 功能。我们使用抓包工具观察,发现开启 keep-alive 后每个连接都会包含多个请求与响应,而当我们不启动 keep-alive 时,每个连接又只有一个请求与响应。同时,每过一段时间复用的连接会被断开并建立新连接发送请求。

结论:

  1. Apache ab 使用 -k 指令后可以开启 HTTP 长连接,指令有效
  2. 每隔一段时间长连接被断开并建立新连接,这段时间暂时未看到有可以设置的地发

Apache JMeter

在 Apache JMeter 的 “HTTP 请求” 取样器里,有 “使用 KeepAlive” 的选项,可是当我们勾选并抓包观察时,发现每个连接并没有被复用,每个连接里只有一个请求与响应,而且由 jmeter 主动断开连接。这并不是真正的 HTTP 长连接,或者说这个 keep-alive 没有生效。

经过我们的尝试,发现在 “HTTP 请求” 取样器上添加一个 ”循环控制器“ 逻辑控制器,每个连接里出现里多个请求与响应,每个连接被复用了。当我们取消勾选 ”使用 KeepAlive“,即使我们添加了循环控制器,也没有发现连接被复用的情况。

同时,我们发现 JMeter 每隔一段时间也会断开连接,并建立新连接发送请求。

结论:

  1. 直接勾选 ”HTTP 请求“ 取样器里的 ”使用 KeepAlive“ 并不是真正的 HTTP 长连接
  2. 需要在 ”HTTP 请求“ 取样器上添加 ”循环控制器“ 逻辑控制器,并勾选 ”使用 KeepAlive“,才能达到 HTTP 长连接效果
  3. 每隔一段时间长连接被断开并建立新连接,这个时间怀疑可以通过配置文件配置。

Postman

这个一个顺便测试的,我们发现 Postman 默认就是长连接,会出现复用的情况。

相关文章

  1. 基于-SLF4J-MDC-机制的日志链路追踪配置属性

    ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC

  2. ajax-跨域访问

    ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>

  3. 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache

    spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port

  4. Java动态代理

    Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public

  5. Java读取classpath中的文件

    public void init() { try { //URL url = Thread.currentThread().getContextClassLo

随机推荐

  1. 基于-SLF4J-MDC-机制的日志链路追踪配置属性

    ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC

  2. ajax-跨域访问

    ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>

  3. 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache

    spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port

  4. Java动态代理

    Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public

  5. Java读取classpath中的文件

    public void init() { try { //URL url = Thread.currentThread().getContextClassLo