我编写了简单的load testing tool来测试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-------------->
在这种情况下,实际吞吐量要好得多,因为测量的吞吐量受到的限制 最慢的线程。所以,我的问题是如何衡量多线程环境中代码执行的吞吐量。
答案 0 :(得分:1)
每个帖子throughput[t] = numberOfTests[t] / overallTime[t]
分别t
怎么样,然后计算所有throughput
的平均值?
然后你还可以计算范围和标准偏差之类的东西,以获得更好的画面。我个人非常喜欢box plots。但只是数字本身会很有趣。
答案 1 :(得分:1)
我知道它有点晚了,但我有两篇与您的问题相关的博文。第一个描述how you measure throughput(和响应时间)。第二个describes a way to graph throughput。