我试图比较两种服务的性能。其中一个运行在较旧的代码库上,另一个是较新的实现。我试图根据仪器绘制数字,我在30秒的采样周期内比较平均值(第50百分位数)和最大值(第99百分位数)。
观察结果是,对于较新的服务:第50百分位数增加了40%(从0.05毫秒增加到0.07毫秒),而第99百分位数从17毫秒减少到11毫秒。
我已经跟踪了一整天的行为。
我的问题是:
这说明了新代码库的性能是什么?
提前致谢。
答案 0 :(得分:0)
较新的代码库通常稍慢(从0.05ms增加到0.07ms),但没有那么高的峰值(从17ms下降11ms)。
如果这是一件好事取决于用例或要求。
例如,如果服务必须始终在15ms内响应,这是一个很好的改进。如果服务必须在0.1ms内回答它不是一个好的改进,因为服务不会更频繁地及时回答,如果服务没有,则无论是花费10ms还是15ms。
您必须记住的是测量的精确度。在如此小的时间跨度内(0.05ms或50ns),测量方法中存在的缺陷比10ms的时间跨度更为可能。
答案 1 :(得分:0)
平均值(第50百分位数)
第50百分位数是中位数或典型潜伏期。平均值是所有延迟的总和除以数字,通常大于中位数。如果您的平均值高出20%,那么您的中位数就会很好。它可以是很多次,甚至是典型的10倍。
和最大(第99百分位数)
实际上,第99个百分位就像我看到的最小值。以下是JMH的一个例子。
Result "rwire8bit":
344.069 ±(99.9%) 0.029 ns/op [Average]
(min, avg, max) = (279.000, 344.069, 8224.000), stdev = 24.468
CI (99.9%): [344.039, 344.098] (assumes normal distribution)
Samples, N = 7496517
mean = 344.069 ±(99.9%) 0.029 ns/op
min = 279.000 ns/op
p( 0.0000) = 279.000 ns/op
p(50.0000) = 342.000 ns/op
p(90.0000) = 362.000 ns/op
p(95.0000) = 364.000 ns/op
p(99.0000) = 371.000 ns/op
p(99.9000) = 379.000 ns/op
p(99.9900) = 520.696 ns/op
p(99.9990) = 2648.557 ns/op
p(99.9999) = 5904.056 ns/op
max = 8224.000 ns/op
这是对包含6个字段的消息进行编码和解码的时间。关键是第99百分位应该只是性能调整的开始,你有99.9th,99.99th,99.999th,99.9999th,最大值是有史以来最糟糕的样本。注意:此测试运行了大约2亿个样本。
这说明新代码库的性能是什么?
这是系统设计用于提高其性能一致性的常见情况。
您愿意在典型延迟方面稍微权衡一下,以便最差的延迟更好。
观察结果是,对于较新的服务:第50百分位数增加了40%(从0.05毫秒增加到0.07毫秒),而第99百分位数从17毫秒减少到11毫秒。
根据经验,如果您的第99百分位数不应超过典型值的4倍,这表明通过优化,您应该能够将第99个减少到0.28毫秒而不是11毫秒,但这取决于品种您正在测试的操作。