gpt4 book ai didi

performance - JMeter 的 nanoThreadSleep 属性 - 如何使用它?

转载 作者:行者123 更新时间:2023-12-04 21:40:02 26 4
gpt4 key购买 nike

我正在设置负载测试解决方案,并且在阅读 JMeter 的文档时,我发现您可以为测试计划设置许多属性。我的测试已经运行得很好并产生了结果、图表等,但是当我试图更深入地了解 JMeter 和结果的准确性等时,我遇到了下面的简介。

来自 JMeter's documentation ,我阅读了以下内容:

# Whether to use System.nanoTime() - otherwise only use System.currentTimeMillis()
sampleresult.useNanoTime=true

# Use a background thread to calculate the nanoTime offset
# Set this to <= 0 to disable the background thread
sampleresult.nanoThreadSleep=5000

现在,我明白 nanotime将基于固定但任意的原始时间,而 currenttimeinmillis基于系统时间(即挂钟)。我知道 nanotime会更精确,这就是我对使用它感兴趣的原因:我正在做负载测试并且需要响应时间测量尽可能准确和精确。

但我遇到的问题是了解如何使用 nanoThreadSleep .纳米时间偏移到底是什么?为什么我想要或不想要一个后台线程来计算纳米时间偏移量?如果我启用 JMeter 以使用 nanotime 运行,但不使用 nanoThreadSleep 会发生什么情况明确设置?

我已经在 StackOverflow 和 Google 上搜索了某种解释,但除了 JMeter 的文档在我粘贴在这里的小简介中所说的之外,我找不到其他解释。其他人能否帮助我理解这一点以及我如何正确有效地使用它?

最佳答案

查看 JMeter 代码,我发现下面的部分很有趣。所以基本上后台线程是一个为 NANOTHREAD_SLEEP 休眠的线程毫秒,然后当它醒来时,它会询问时间。

该值必须保持尽可能高,以免增加采样的开销,但必须保持尽可能低以提供足够的准确性。

如果您不使用纳米线程,那么所有时间都是使用 System.nanoTime() 计算的,这可能会也可能不会提供额外的准确性。通常,高精度计数器受频率变化的影响很大(例如,由于省电模式)。我的观点是你不需要担心使用 System.nanoTime() 因为 您将无法以纳秒级的精度获得测试的可重复性 .甚至毫秒似乎也是一个非常紧凑的时间间隔。

为什么要使用后台线程来计算时间? 我认为这是因为如果线程只测量时间,您可以在执行期间随时询问当前时间。如果不使用后台线程,我认为时间仅在采样点更新。启用线程后,我认为这会更频繁地更新时间(前提是 NANOTHREAD_SLEEP 得到了很好的考虑)。我还没有写过 JMeter,但我认为这是时间线程背后的哲学。

这有用吗? 可能它可以挤压额外的准确性。但是,JMeter 用于测试 Web 应用程序的性能,由于网络延迟、资源使用等原因,可重复性较差 .即使你测量纳秒,人们也会对秒和毫秒部分更感兴趣,而且测试是可重复的。

代码:

private static class NanoOffset extends Thread {

private static volatile long nanoOffset;

static long getNanoOffset() {
return nanoOffset;
}

@Override
public void run() {
// Wait longer than a clock pulse (generally 10-15ms)
getOffset(30L); // Catch an early clock pulse to reduce slop.
while(true) {
getOffset(NANOTHREAD_SLEEP); // Can now afford to wait a bit longer between checks
}
}

private void getOffset(long wait) {
try {
TimeUnit.MILLISECONDS.sleep(wait);
long clock = System.currentTimeMillis();
long nano = SampleResult.sampleNsClockInMs();
nanoOffset = clock - nano;
} catch (InterruptedException ignore) {
// ignored
}
}
}

关于performance - JMeter 的 nanoThreadSleep 属性 - 如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com