【发布时间】:2013-03-10 12:12:46
【问题描述】:
我正在做一个项目,我应该在我们的REST Service 上进行分析。然后计算出我们服务的90 percentile 或95 percentile 是多少。表示90% of time 或95% percent of time 通话占用了多少时间
下面是我通过分析我的服务创建的直方图-
0 came back between 1 and 2 ms
0 came back between 3 and 4 ms
0 came back between 5 and 8 ms
0 came back between 9 and 16 ms
0 came back between 17 and 32 ms
2205 came back between 33 and 64 ms
141 came back between 65 and 128 ms
50 came back greater than 128 ms
从上面的直方图可以看出,2205 调用在33 and 64 ms 之间返回,141 calls 在65 and 128 ms 之间返回。
所以现在我想弄清楚如何计算 90 percentile 或 95 percentile 这个?表示90 percentage of time 呼叫在多少毫秒内返回?
上面的直方图我也有一个地图,如果我们不能从上面的直方图中找出这个百分位数,那么我们也可以使用这个地图。
仅从这张地图,我正在创建上面的直方图-
{213=1, 114=2, 185=1, 131=1, 40=145, 67=8, 49=35, 537=2, 164=1, 565=1, 55=13, 96=1, 546=1, 117=1, 68=10, 62=6, 83=1, 34=333, 41=108, 179=1, 48=48, 111=1, 129=1, 69=11, 33=1, 173=1, 61=8, 541=1, 74=7, 180=2, 42=78, 47=46, 56=11, 84=2, 70=12, 228=1, 273=1, 46=52, 102=1, 225=1, 81=2, 181=1, 563=1, 549=1, 137=1, 73=3, 235=1, 53=17, 90=1, 36=190, 118=1, 45=78, 35=267, 72=9, 63=16, 54=11, 271=1, 189=1, 209=1, 175=4, 51=23, 203=2, 37=186, 58=5, 196=2, 237=1, 86=3, 44=81, 64=15, 92=3, 224=1, 71=8, 251=1, 52=12, 78=3, 43=75, 147=1, 133=1, 580=1, 57=11, 263=1, 566=1, 85=1, 243=1, 38=161, 559=1, 80=3, 132=1, 194=1, 107=6, 65=5, 183=1, 222=1, 93=1, 60=12, 231=1, 94=1, 66=12, 122=1, 39=135, 50=35, 76=1, 59=6, 104=1, 158=1, 113=1, 204=1, 87=1, 115=2}
在上图中,key 是毫秒数,值为total number of calls
比如——
213=1
这意味着,1 电话在213 milliseconds 中返回。
114=2
2 电话返回到114 milliseconds。
谁能帮我解决这个问题?我也可以从histogram 或上面的Map 创建百分位数。
【问题讨论】:
-
目测数字,第 90 个百分位数略低于 64 毫秒。第 95 个百分位约为 100 毫秒。
-
如何找出来?我应该使用什么逻辑?我需要在我的 java 代码中添加相同的逻辑,以便程序完成后,我应该打印出来。
-
统计有多少个条目,n = entries.count * 0.9 或 0.95,entry[n] 是你想要的百分位数
-
你能举个例子吗?这样我就可以更明白你是怎么得到那个号码的?感谢您的帮助。
-
当然。对于 90% 的百分位数,有 2205+141+50 = 2396 个条目。 2396*0.9 = 2156.4,四舍五入得到 2156。你说“2205 在 33 到 64 毫秒之间返回”,所以 90% 的百分位数略低于 64 毫秒(因为它对应于一个将在 64 毫秒以下的条目)跨度>
标签: java rest profiling percentile