JSR-233 定时器奇怪(?)行为

Posted

技术标签:

【中文标题】JSR-233 定时器奇怪(?)行为【英文标题】:JSR-233 Timer strange(?) behavior 【发布时间】:2022-01-23 04:14:54 【问题描述】:

我正在使用 JSR-223 Timer (jMeter 5.4.1),使用 groovy 语言,并尝试向我的线程添加延迟\暂停。

我正在遵循 BlazeMeter (How to Easily Implement Pacing) 的指示。

奇怪的(?)行为是实际延迟是所需的两倍。

脚本如下:

Long pacing = 5000 - prev.getTime();

Integer iPacing = pacing != null ? pacing.intValue() : null; 
log.info("Transaction Pacing: " +String.valueOf(iPacing));
vars.put("myDelay", String.valueOf(iPacing)); 

return iPacing;

我得到了采样器操作的持续时间,然后计算 "myDelay" 与 5,000 毫秒的基本持续时间的差异。 myDelay 是我在 Flow Control Sampler 中使用的变量。

现在奇怪的结果: 我实现的实际延迟是计算的两倍。在本例中,延迟为 5K mSec,但实际延迟为 10K mSec。

现在这是真正奇怪的问题: 如果我标记出return iPacing,则延迟为 5K 毫秒根据需要(在日志文件中带有警告消息)。

请参阅下面的输出。 为什么流控制采样器会添加 myDelayiPacing 值?

返回第一个块 - iPacing。整体暂停是 myDelay + iPacing。 第二个块 - iPacing 被标记出来。延迟仅为 myDelay。

【问题讨论】:

【参考方案1】:

您的延迟是 TWICE 只是因为您设置了 TWICE。

此声明:

return iPacing;

将在 JSR223 时间 SCOPE 中的每个 SAMPLER 之前创建一个延迟

因此无需使用Flow Control Action 采样器,因为您已经在 J​​SR223 计时器中创建了延迟。

一般来说,在 JMETER 中没有实现 PACING,因为有一种更简单的方法可以创建每秒 X 个请求的负载:Constant THROUGHPUT timer 和朋友。

【讨论】:

以上是关于JSR-233 定时器奇怪(?)行为的主要内容,如果未能解决你的问题,请参考以下文章

真是奇怪,js可以,jq却开启了多个定时器,谁能解答一下

STM32F4 定时器 - 预分频器或周期值必须除以二才能得到我期望的结果

一旦计时器运行为零,就执行一个函数

Java--定时器问题

如何使用C++11实现跨平台的定时器timer

C中时间函数的奇怪问题