【问题标题】:JMeter: HTTP Persistance connection using JMeterJMeter:使用 JMeter 的 HTTP 持久连接
【发布时间】:2016-08-17 13:57:01
【问题描述】:

我需要使用 JMeter 保持一段时间的会话。

测试计划和脚本细节如下:

举例来说,有 100 个用户使用他们各自的凭据登录到我的 Web 应用程序。我的 Web 应用程序的会话超时为 30 分钟。这意味着如果这 100 个用户在登录后保持空闲 30 分钟,应用程序将在接下来的 30 分钟内保持连接打开,以接收来自登录客户端的任何进一步请求。连接不会关闭。所以如果客户端需要进行另一个HTTP事务,它可以使用空闲的keepalive连接而不是创建一个新的TCP连接。现在,当这 100 个连接处于活动或空闲状态时,我需要确定新登录客户端的响应时间。但是我无法使用 JMeter 生成这个场景。

这是我的脚本详细信息:->简单登录请求->终极线程组:启动线程计数-100->启动时间-120->保持负载-120->关闭时间-60->恒定吞吐量计时器-目标吞吐量(1200/分钟)。 ->测试在非 GUI 模式下运行 ->我已在“HTTP 请求”采样器中允许“keepAlive”。

所有线程都在 120 秒内启动,之后,此负载将再保持 120 秒。因此,总共 240 秒的登录请求将被发送(实际上在关机期间也是如此)。在我的测试中,为 100 个线程生成了大约 6500 个登录请求,并且它们都使用不同的凭据登录。我使用 CSV 数据配置元素来传递登录数据。我在执行测试时监控了服务器日志,并观察到所有登录请求都被接受并成功。因此,在实时场景中,如果 6500 个用户使用不同的机器或 PC 登录我的 Web 应用程序,并且在登录后什么都不做,我的服务器将在接下来的 30 分钟内保持连接打开以进行进一步的 HTTP 事务。我如何在 JMeter 中生成这个场景。或者在我的脚本中,所有这些会话都保持活跃吗?

任何建议或指导都会非常有帮助。

【问题讨论】:

  • 我认为您将 TCP 级别的 keepalive (en.wikipedia.org/wiki/Keepalive) 与 HTTP 持久连接混淆了,有时也称为“keep-alive” (en.wikipedia.org/wiki/HTTP_persistent_connection)。但它们是无关的。此外,应用程序会话依赖于 TCP 级别的 keepalive 是很不寻常的,但依赖于 HTTP 持久会话并不罕见。
  • 那么,在我的测试脚本中,所有这 6500 个请求都会保留它们的会话吗?我用“查看结果树”观察了结果,所有登录请求都生成了具有不同登录凭据的不同会话 ID。我必须确保所有这些会话都保持活动状态,同时我必须确定登录请求的新设置(来自不同机器的另一个“X”用户尝试登录)的响应时间。如何确保我的第一组(100 个用户或线程的 6500 个请求)请求保持活动状态?是否有任何工具可以从服务器端观察这一点?
  • 如何检查 HTTP 级别的 keep-alive 完全取决于应用程序级别的行为,而不是某些系统参数或通用工具。即:打开的 TCP 连接数不会映射到服务器上当前活动的会话数。要验证会话是否处于活动状态,您需要知道活动在服务器上的含义。例如,也许您可​​以在 15 分钟后使用相同的 6500 个用户令牌发出一些操作,并确保不需要登录?或者检查 Web 应用程序中的线程数(如果线程确实映射到连接,情况并非总是如此)。有很多可能性。

标签: performance jmeter load-testing jmeter-plugins


【解决方案1】:
  • 不需要私服,jmeter就够了。如果我没有弄错您正在尝试做的是峰值测试,那么您想知道响应时间如何随着新用户会话的创建而增加。
    • 测试从发送 100 个请求开始,每个请求都会创建一个新会话。
    • 如果下一个请求不使用相同的 cookie,它将为每个请求创建一个新会话。
    • 峰值测试将增加负载,直到注入器耗尽线程或应用程序开始崩溃。
  • 从您将获得的测试中,将响应时间与负载相关联的图
  • 什么是活跃用户,什么不是活跃用户取决于您的系统(运行测试后,您会发现哪个是最好的选择)。
    • 如果会话管理实现对大量 cookie 敏感,我将使用所有会话作为活动会话,甚至是空闲会话。 Injector threads.
    • 如果应用程序容器同时处理会话,无论有多少空闲用户,我都会选择系统在给定时刻处理请求的那些用户作为活动用户。
  • 如果你在做性能测试来帮助开发者发现瓶颈,你还需要监控资源消耗。
    • JMeter 的插件中已经包含代理和监视器。

【讨论】:

    【解决方案2】:

    从性能的角度来看,您的 30 分钟超时时间太长了。您锁定会话资源的时间将比您需要的时间长得多,以便优先选择一小部分用户。满足 30 分钟边缘情况的开销大于为同一边缘情况创建新会话的开销。

    我建议您使用您选择的日志分析工具(我更喜欢 Splunk>,因为它易于使用)并为您的用户分析页面请求之间的时间。这比你想象的要容易。从日志中消除所有静态资源请求,留下顶级页面请求。您将拥有每个请求的时间戳以及它来自的页面(引用标签)。收集任何给定页面的响应时间差异样本集,减去具有相同会话或 IP 地址的引用标签上注明的页面的页面(取决于您的架构)。现在你有一个所有页面到页面等待时间的样本集。

    接下来,选择您选择的工具,并按分钟绘制这些项目的分布图。您通常会发现,对于面向公众的网站,页面到页面分组高度集中在一到三分钟的范围内。在该范围之外,样品下降得非常快。长时间会话(例如您提到的 30 分钟)会发生什么情况,即您锁定了在较高负载条件下无法释放的资源,从而导致性能下降。如果您有购物车,这实际上会减慢整个购物车系统的速度,从而降低转化率。会话是作为最后一个请求的偏移量举行的,而不是第一个请求。

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多