题
我写了简单 负载测试工具 用于测试Java模块的性能。我面临的一个问题是吞吐量测量的算法。测试在多个线程中执行(客户端配置应重复多少次测试),并记录执行时间。因此,测试完成后,我们将有以下历史记录:
4 test executions
2 threads
36ms overall time
- idle
* test execution
5ms 9ms 4ms 13ms
T1 |-*****-*********-****-*************-|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-----|
<-----------------36ms--------------->
目前,我以以下方式计算吞吐量(每秒): 1000 / overallTime * threadCount
.
但是有问题。如果一个线程会更快地完成自己的测试(无论出于何种原因)怎么办:
3ms 3ms 3ms 3ms
T1 |-***-***-***-***----------------|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-|
<--------------32ms-------------->
在这种情况下,实际吞吐量要好得多,因为测得的吞吐量是 由最慢的线程界定. 。因此,我的问题是如何在多线程环境中测量代码执行的吞吐量。
解决方案
怎么样 throughput[t] = numberOfTests[t] / overallTime[t]
每个线程分开 t
, ,然后计算所有的平均值 throughput
?
然后,您还可以计算范围和标准偏差之类的内容,以获得更好的图像。我个人非常喜欢 盒子图. 。但是,只有数字本身会很有趣。
其他提示
我知道它有点晚了,但是我有两个与您的问题相关的博客文章。第一个描述 如何测量吞吐量 (和响应时间)。第二 描述一种图形吞吐量的方法.
不隶属于 StackOverflow