1

我正在使用 Azul 的 jHiccup 运行应用程序。该应用程序通过带有 -javaagent 选项的 jsvc 启动。jHiccup 设置是默认设置(输出文件名除外)。

该应用程序运行约 107 分钟。但是,如果我将结果hgrm文件中的所有值加起来,打嗝的总长度似乎太大了。

我像这样计算打嗝值的总和:

Sum( (TotalCountIncludingThisValue[n] - TotalCountIncludingThisValue[n-1]) * Value[n] )

结果为 1275 万,或约 213 分钟(假设值以毫秒为单位)。这大约是应用程序运行时间的两倍。

Total count * Mean(从直方图底部的值)也给出了 1200 万,所以这个公式很可能是正确的。

为了比较,我从 GC 日志中添加了“应用时间”和“停止时间”。结果接近我的预期:~105 分钟。应用时间和〜2分钟。停止时间。


我不小心覆盖了原始文件,因此这些是来自不同运行的示例文件:
https ://dl.dropboxusercontent.com/u/644287/jHiccup/hiccup.dat
https://dl.dropboxusercontent.com/u /644287/jHiccup/hiccup.dat.hgrm

运行耗时约 79 分钟(17:50-19:09),但平均*总计数约为 2300 万。(即 380 分钟)。

4

1 回答 1

3

更新:[在下面保留我原来的错误帖子]

行。所以我们都数学错误(在你的问题和我最初的答案中)。说 (Total Count * Mean( 应该大致等于运行时的健全性检查只是虚假的数学。

这可以通过以下思考练习简单地证明:

以下非常简单的场景:您测量一个完美运行的应用程序(空闲,所有间隔显示 0 打嗝)100 秒。然后你 ^Z 系统 100 秒。然后你让它再次在前台运行并立即 ^C 它。总运行时间为 200 秒。

以下是关于这样一个系统的一些正确的“人类如何用数字来描述”的陈述:

  • 99.99%'ile 将非常接近 100,000 毫秒。
  • 10%'ile、20%'ile、... 50%'ile 都将非常接近 0 毫秒。
  • 在前 100 秒(以及前 100,000 个采样周期)内,平均值为 0 毫秒。
  • 在第二个 100 秒(以及第二个 100,000 个采样周期)期间,平均值为 50,000 毫秒。
  • 总体平均值为 25,000 毫秒(超过 200 秒的总运行时间)。

但是(正确地)将在直方图的 TotalCount 中报告 200,000 个结果(每 1 毫秒的经过时间一个)。

所以(平均值 * 总数)= 200,000 * 25,000 == 5,000,000,000

这是挂钟时间的 25,000 倍。这并没有错。该乘法有一个〜N ^ 2的事情(实际上是N *(N-1)/ 2),这正是它的正确行为方式......

这里的关键是,对于每个百分位数,直方图 [正确地] 报告了会遇到低于某个量级的打嗝水平的整体随机样本的百分比(随着时间的推移在没有协调的情况下执行)。当发生单个长时间冻结时(例如,在您的示例输出中看到最大 2,654 毫秒),这不是会受到影响的 1 个时间点。受影响的采样时间点与冻结的毫秒数一样多。正确测量和表示,一次冻结将产生大约每毫秒 1 个计数,值在最大值和 0 之间线性变化(2654 毫秒、2653 毫秒、2652 毫秒、... 3 毫秒、2 毫秒、1 毫秒)。这是计算随机、不协调的样本可能遇到的可能延迟分布的正确方法。

我有点尴尬,因为我最初的回答重复了我在题为“如何不测量延迟”(http://www.infoq .com/presentations/latency-pitfalls,这是在大约 32 分钟的“协调遗漏问题”下)。我用正确的数学方法构建了 jHiccup 和 HdrHistogram 来避免这个问题,这就是为什么你会在数据中看到正确的结果。

事实上,如果你的健全性检查显示“好”数字,最大时间在 1000 毫秒内,这将很好地表明测量系统正在表现出协调遗漏......

——吉尔。

--------原始答案,这是“错误的” ------------

您可以发布一个示例 .hgrm 数据集来说明这一点吗?我刚刚查看的文件似乎显示了总检测运行时间与 .hgrm 文件中的计数之间的密切关系。最简单的健全性测试是 Total Count * Mean(均在文件底部报告)应该非常接近运行时。该数据来自产生百分位线的同一直方图......

请注意,由于一个非常简单的原因,百分位线上的计数不是相加的。对于相同的精确值,可以报告两个百分位水平。这对于噪音很小的长时间运行来说是很常见的。但是,您上面的数学(仅计算增量计数)“应该”正常工作。

[小记,你的数学偏离了 1 行:每个百分位线显示百分位和数值等于或低于该行值的值的计数。因此,值应乘以下一行 (n+1) 的计数与“此”行 (n) 的计数之间的增量,但这不应该对您的测量产生很大影响]。

下面是一个示例文件格式控制运行,耗时约 1685 秒,其中 jHiccup 在运行 30 秒后开始检测(因此检测时间约为 1655 秒)。在这个数据集上使用excel,结果:

Sum( (TotalCountIncludingThisValue[n+1] - TotalCountIncludingThisValue[n]) * Value[n] )

显示约 16237 秒,平均 * 总计数显示约 16591 秒。

jHiccup 直方图报告,2013 年 4 月 22 日星期一 15:28:07 CDT:

值、百分位数、TotalCountIncludingThisValue

1.01 0.000000000000         47
1.06 0.100000000000     483774
1.06 0.200000000000     483774
1.06 0.300000000000     483774
1.10 0.400000000000     628589
1.11 0.500000000000     804685
1.12 0.550000000000    1024190
1.12 0.600000000000    1024190
1.12 0.650000000000    1024190
1.13 0.700000000000    1388741
1.13 0.750000000000    1388741
1.13 0.775000000000    1388741
1.13 0.800000000000    1388741
1.13 0.825000000000    1388741
1.13 0.850000000000    1388741
1.13 0.875000000000    1388741
1.13 0.887500000000    1388741
1.13 0.900000000000    1388741
1.13 0.912500000000    1388741
1.14 0.925000000000    1471124
1.14 0.937500000000    1471124
1.14 0.943750000000    1471124
1.14 0.950000000000    1471124
1.14 0.956250000000    1471124
1.14 0.962500000000    1471124
1.14 0.968750000000    1471124
1.14 0.971875000000    1471124
1.14 0.975000000000    1471124
1.14 0.978125000000    1492169
1.14 0.981250000000    1492169
1.14 0.984375000000    1492169
1.14 0.985937500000    1492169
1.14 0.987500000000    1492169
1.14 0.989062500000    1492169
1.15 0.990625000000    1500639
1.15 0.992187500000    1500639
1.15 0.992968750000    1500639
1.15 0.993750000000    1500639
1.15 0.994531250000    1500639
1.16 0.995312500000    1504895
1.16 0.996093750000    1504895
1.16 0.996484375000    1504895
1.16 0.996875000000    1504895
1.16 0.997265625000    1504895
1.16 0.997656250000    1504895
1.17 0.998046875000    1506535
1.17 0.998242187500    1506535
1.17 0.998437500000    1506535
1.17 0.998632812500    1506535
1.17 0.998828125000    1506535
1.18 0.999023437500    1507442
1.18 0.999121093750    1507442
1.18 0.999218750000    1507442
1.18 0.999316406250    1507442
1.18 0.999414062500    1507442
1.18 0.999511718750    1507836
1.18 0.999560546875    1507836
1.18 0.999609375000    1507836
1.18 0.999658203125    1507836
1.18 0.999707031250    1507836
1.19 0.999755859375    1508028
1.19 0.999780273438    1508028
1.19 0.999804687500    1508028
1.19 0.999829101563    1508028
1.20 0.999853515625    1508106
1.20 0.999877929688    1508106
1.21 0.999890136719    1508145
1.21 0.999902343750    1508145
1.22 0.999914550781    1508163
1.22 0.999926757813    1508174
1.25 0.999938964844    1508186
1.34 0.999945068359    1508195
1.82 0.999951171875    1508204
2.42 0.999957275391    1508213
3.54 0.999963378906    1508222
4.74 0.999969482422    1508231
5.09 0.999972534180    1508236
5.98 0.999975585938    1508241
6.24 0.999978637695    1508245
7.01 0.999981689453    1508251
7.97 0.999984741211    1508254
8.26 0.999986267090    1508257
8.96 0.999987792969    1508259
9.02 0.999989318848    1508261
9.98 0.999990844727    1508265
10.24 0.999992370605    1508266
11.01 0.999993133545    1508268
11.01 0.999993896484    1508268
11.97 0.999994659424    1508269
13.95 0.999995422363    1508271
14.98 0.999996185303    1508272
14.98 0.999996566772    1508272
16.00 0.999996948242    1508273
16.00 0.999997329712    1508273
17.02 0.999997711182    1508274
18.05 0.999998092651    1508275
18.05 0.999998283386    1508275
18.05 0.999998474121    1508275
18.05 0.999998664856    1508275
19.07 0.999998855591    1508276
19.07 0.999999046326    1508276
19.07 0.999999141693    1508276
19.07 0.999999237061    1508276
19.07 0.999999332428    1508276
19.97 0.999999427795    1508277
19.97 1.000000000000    1508277

#[Mean    =         1.10, StdDeviation   =         0.06]
#[Max     =        19.84, Total count    =      1508277]
#[Buckets =           25, SubBuckets     =          256] 
于 2013-05-09T05:05:29.700 回答