我正在对服务进行一些性能/负载测试。想象一下这样的测试功能:
bytesPerSecond = test(filesize: 10MB, concurrency: 5)
使用它,我将填充不同大小和并发级别的结果表。还有其他变量,但你明白了。
测试功能会旋转concurrency
个请求并跟踪吞吐量。这个速率从零开始,然后是尖峰和下降,直到它最终稳定在“真实”值上。
然而,这种稳定性可能需要一段时间才能发生,并且有许多输入组合需要评估。
test
函数如何决定何时执行足够的样本?通过足够的,我想我的意思是如果测试继续,结果不会超出一定的余地。
我记得刚才读过一篇关于这篇文章的文章(来自其中一位jsperf作者)讨论了一个强大的方法,但我再也找不到这篇文章了。
一种简单的方法是计算滑动值窗口的标准偏差。有更好的方法吗?
答案 0 :(得分:2)
IIUC,您正在描述estimating the confidence interval of the mean with unknown variance的经典问题。也就是说,假设您有 n 结果, x 1 ,...,x n ,其中每个 x i 是一个你不太了解的过程的样本:不是均值,不是方差,而不是分布的形状。对于某些所需的置信区间,您现在想要 n 是否足够大,以便高概率真实均值在您的均值区间内。
(请注意,在条件相对较弱的情况下,Central Limit Theorem保证样本均值将收敛到正态分布,但要直接应用它,则需要方差。)
因此,在这种情况下,classic solution确定 n 是否足够大,如下所示:
首先计算样本均值μ=Σ i [x i ] / n 。还计算归一化样本方差 s 2 =Σ i [(x i - μ) 2 ] /(n - 1)
取决于 n 的大小:
如果 n> 30 ,置信区间近似为μ±z α/ 2 (s /√(n)),如果需要,您可以找到{ {3}}对 z 和α的解释。
如果 n< 30 ,置信区间近似为μ±t α/ 2 (s /√(n));再次查看here对 t 值的解释以及表格。
如果信心足够,请停止。否则,请增加 n 。
答案 1 :(得分:0)
稳定性意味着变化率(导数)为零或接近于零。
测试功能可以提升并发请求并跟踪吞吐量。 这个速率从零开始,然后是尖峰和下降直到它最终 稳定“真实”价值。
我会跟踪您过去的吞吐量值。例如,最后的X值左右。根据这个值,我会计算变化率(吞吐量的导数)。如果你的导数接近于零,那么你的测试是稳定的。我会停止测试。
如何找到X?我认为不是常数值,比如10,根据最大测试次数选择一个值可能更合适,例如:
X = max(10,max_test_count * 0.01)