如何调试并查看随时间推移存储到线程间通信插件的 FIFO 队列中的内容?

How can I debug and see what gets stored over time into the FIFO queue of inter-thread communication plugin?

我有以下 JMeter 上下文:

在一个并发线程组 1 中,我有一个 JSR223 采样器,它将请求消息发送到 MQ queue1 并始终获取 JMSMessageID 和 epochTimestamp(派生自 JMS_IBM_PutDate + JMS_IBM_PutTime)并放入他们变成一个变量。在这个采样器下面是一个线程间通信后处理器元素,它从这个变量中获取数据并将其放入一个 FIFO 队列中。

在另一个并发线程组 2 中,我有另一个 JSR223 采样器,其代码用于从 MQ 队列 2 获取 MQ 队列 1 上发送的所有消息的响应消息。 为此,(并能够计算每条消息的响应时间)在 JSR223 采样器执行之前,我使用了线程间通信预处理器元素,它从 FIFO 队列中获取消息 ID 和时间戳(60 秒超时)和将它传递给一个变量,JSR223 采样器可以使用该变量来计算每条消息的请求-响应时间。

我想对系统进行压力测试,这就是为什么我在两个线程组中每 1 分钟逐渐动态增加每秒请求数(出于脚本测试目的),如下所示: 我为此使用并发线程组的 tstFeedback 函数:

${__tstFeedback(ThroughputShapingTimerIn,1,1000,10)}

我的问题是:

当我逐渐增加所需的 TPS 负载时,在前 4 个目标 TPS 步骤中,消费者线程与生产者线程保持同步(同步),但随着时间的推移和负载的增加,消费者线程似乎是花更多时间来查找和使用消息。就好像消费者线程的负载不再能够跟上生产者线程的负载,尽管两个线程组具有相同的负载模式。这最终会导致保持响应消息的 queue2 变满。这是我的意思的直观表示: 消费者样本最终比生产者样本少得多。我的期望是他们应该或多或少相等......

我需要了解如何调试此脚本并找出原因:

非常感谢help/suggestion。

  1. 首先看看 jmeter.log file,那里至少有 865 个错误,所以我强烈怀疑你的 Groovy 脚本是否在做它们应该做的事情做

  2. Don't run your test in GUI mode,仅用于测试开发和调试,执行时应使用命令行非GUI模式

  3. 当您调用 __fifoPop() 时,您可以将值保存到 JMeter 变量中,例如 ${__fifoPop(queue-name,some-variable)},可以使用 Debug Sampler 可视化该变量。可以使用 __fifoSize() 函数

    检查队列的大小

    或者我的期望是,像您这样的 Groovy 专家在 Groovy 代码中打印队列项目应该没有任何问题: