1

这是我刚刚想到的一个理论问题。

通常在运行 JMeter 负载测试时,我发现默认堆设置就足够了。

有时在运行密集的 JMeter 负载测试时,JMeter 会抛出 OutOfMemory 异常,表明它需要更多堆(通常)。

我担心这两者之间的情况。如果 JMeter没有抛出 OutOfMemory,有没有办法让自己确信垃圾收集(在 JMeter 方面)不会对结果产生不利影响?每次运行 JMeter 时都必须监控 gc 日志吗?

我想这更实际的一面是;我可以比较两个单独的 JMeter 测试的输出,其中 Jmeter 使用不同的堆大小?

编辑:我注意到的一件事是,Jmeter UI 有一个图标来指示 GC 开销限制已被违反。但这来自 JVM,并在 98% 的 CPU 时间用于执行 GC 时触发,我认为我的结果在达到这一点之前很久就会出现偏差。

4

1 回答 1

1

如果 JMeter 没有抛出 OutOfMemory,有没有办法让自己确信垃圾收集(在 JMeter 方面)不会对结果产生不利影响?每次运行 JMeter 时都必须监控 gc 日志吗?

确定堆大小是否影响结果的简单方法是使用更大的堆大小再次运行测试,看看是否有任何不同。这同样适用于您正在测试的应用程序和 JMeter JVM。

如果确实有证据表明存在问题,则可以更改 JMeter JVM 设置以使用低暂停收集器。这可能会减少明显的“异常”请求时间的数量......如果它们是由 JMeter 端 GC 暂停引起的。但它(理论上)也可以降低 JMeter JVM 的整体吞吐量,从而降低它可以发出请求的平均速率。

如果应用程序和 JMeter 在相同的硬件上运行,您可以尝试的另一件事是调整进程优先级以确保 JMeter 进程没有 CPU 不足。

于 2013-04-19T11:07:41.943 回答