当第99百分位数减少并且服务的第50百分位数增加时,它意味着什么?

时间:2015-08-13 05:21:07

标签: java performance statistics soa latency

我试图比较两种服务的性能。其中一个运行在较旧的代码库上,另一个是较新的实现。我试图根据仪器绘制数字,我在30秒的采样周期内比较平均值(第50百分位数)和最大值(第99百分位数)。

观察结果是,对于较新的服务:第50百分位数增加了40%(从0.05毫秒增加到0.07毫秒),而第99百分位数从17毫秒减少到11毫秒。

我已经跟踪了一整天的行为。

我的问题是:

这说明了新代码库的性能是什么?

提前致谢。

2 个答案:

答案 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毫秒,但这取决于品种您正在测试的操作。