【问题标题】:What does it mean when 99th percentile has decreased and 50th percentile has increased for a service?当服务的第 99 个百分位减少而第 50 个百分位增加时,这意味着什么?
【发布时间】:2015-11-05 22:30:48
【问题描述】:

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

观察结果是,对于较新的服务:第 50 个百分位增加了 40%(从 0.05ms 增加到 0.07ms),而第 99 个百分位从 17ms 下降到 11ms。

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

我的问题是:

这说明了新代码库的性能如何?

提前致谢。

【问题讨论】:

  • 它说你的mean增加了,你的variance减少了。您的新代码平均性能稍差,但在最坏情况下所用的时间比您以前的代码库要好。
  • @ReservoirSampling 延迟不遵循正态分布或类似的分布。请参阅下面的答案,其中 99.9% 的置信区间甚至不包括第 50 个百分位数。
  • @PeterLawrey 我并不是说它遵循正态分布,我只是想解释平均和最坏情况,是的,我同意我在错误的意思。

标签: java performance statistics soa latency


【解决方案1】:

平均(第 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.9、第 99.99、第 99.999、第 99.9999,最大值是有史以来最差的样本。注意:此测试运行了大约 2 亿个样本。

这对新代码库的性能有何影响?

当系统旨在提高其性能的一致性时,这是一种常见情况。

您愿意在典型延迟上做出一些权衡,以使最差的延迟变得更好。

观察结果是,对于较新的服务:第 50 个百分位增加了 40%(从 0.05ms 增加到 0.07ms),而第 99 个百分位从 17ms 下降到 11ms。

根据经验,如果您的第 99 个百分位数不应超过您的典型值的 4 倍,这对我来说表明通过优化您应该能够将第 99 个百分位数减少到 0.28 毫秒而不是 11 毫秒,但这取决于品种您正在测试的操作数。

【讨论】:

    【解决方案2】:

    较新的代码库通常稍微慢一些(从 0.05 毫秒增加到 0.07 毫秒),但没有那么高的峰值(从 17 毫秒下降到 11 毫秒)。

    如果这是一件好事取决于用例或需求。

    例如,如果服务必须始终在 15 毫秒内响应,这是一个很好的改进。如果服务必须在 0.1 毫秒内响应,这不是一个很好的改进,因为服务不会更频繁地及时响应,如果服务没有,不管是 10 毫秒还是 15 毫秒。

    您必须牢记的是测量精度。在如此小的时间跨度(0.05ms 或 50ns)内,测量方法中存在缺陷的可能性比在 10ms 这样的时间跨度内要大得多。

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 2020-08-07
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2011-10-10
      相关资源
      最近更新 更多