日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
優(yōu)秀Java才懂的,長尾請求Hack工具!

JMH屏蔽了一些環(huán)境的差異,可以讓狗子們快速的獲取吞吐量、平均響應(yīng)時間等關(guān)鍵性指標。但是,性能的評測標準并不僅僅是單個維度。

創(chuàng)新互聯(lián)建站專注于藁城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城系統(tǒng)網(wǎng)站開發(fā)。藁城網(wǎng)站建設(shè)公司,為藁城等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

比起那些了不起的性能,服務(wù)響應(yīng)的穩(wěn)定性,可能是另外一個比較重要的話題。

百分位

有時候,我們某些重要的服務(wù),對每個請求的延遲忍受度都很低。如果我們用比較專業(yè)的詞來描述的話,那就是:我們無法忍受任何長尾請求,即使平均響應(yīng)時間非常的短。

這就需要一種指標來測量這種情況。為了解決這個問題,一個比較常用的指標,就是百分位數(shù)(Percentile)。

如果非要找出一種形狀的話,那它就是請求分布的直方圖。

百分位可以這么理解。如果我們?nèi)Χㄒ粋€時間范圍,把每次請求的耗時加入到一個列表中,然后,按照從小到大的順序?qū)⑦@些時間進行排序。這樣,我們?nèi)〕瞿硞€位置請求的耗時,這個數(shù)字 就是TP值。可以看到,TP值(Top Percentile)和中位數(shù)、平均數(shù)等是類似的,都是一個統(tǒng)計學(xué)里的術(shù)語。

它的意義是,超過N%?的請求,都在X?時間內(nèi)返回。比如TP90=50ms?,意思就是超過90th的請求,都在50ms內(nèi)返回。

這個指標能夠反映出應(yīng)用接口的整體響應(yīng)情況。比如,某段時間發(fā)生了長時間的GC,就會影響高百分位的請求耗時增加。

我們一般分為Tp50、TP90、TP95、TP99、TP99.9等多個段,對高百分位的值要求越高,對系統(tǒng)響應(yīng)能力的穩(wěn)定性要求越高。

對于普通的百分位分布,像Dropwizard、MicroMeter、OpenTelemetry等組件,也會累積一些直方圖到監(jiān)控指標里,如果你使用SpringBoot等組件,你會發(fā)現(xiàn)這些值存在于le中。

http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="0.001",} 0.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="0.001048576",} 0.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="0.001398101",} 0.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="0.001747626",} 0.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="0.002097151",} 0.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="0.002446676",} 0.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="0.002796201",} 0.0

// 54 other lines here

http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="12.884901886",} 3.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="14.316557651",} 3.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="15.748213416",} 3.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="17.179869184",} 3.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="22.906492245",} 3.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="28.633115306",} 3.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="30.0",} 3.0
http_server_requests_seconds_bucket{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/foo",le="+Inf",} 3.0

這些值都是估計值,采用了插值統(tǒng)計的方式,精度其實是受損的。如果我們的服務(wù)有更高的要求,要求抖動盡可能的少,那么我們就需要更其他的工具支持。

HdrHistogram

HdrHistogram,可以用較少的資源,來計算平均值、中位數(shù)等,且擁有較高的精度。認識HdrHistogram,是從Hytrix依賴中發(fā)現(xiàn)的,Hytrix用它來統(tǒng)計latency。

要使用它,我們只需要在pom中引入maven坐標即可。


org.hdrHistogram
HdrHistogram
2.1.12

使用的時候,我們只需要傳入所需要的精度就可以了。

Histogram HISTOGRAM
= new Histogram(TimeUnit.MINUTES.toNanos(1), 3);

比如,上面這行代碼,就定義了一個納秒維度的精度。也就是說,1分鐘之內(nèi)的請求,都可以使用納秒來描述請求的耗時。

它有兩個參數(shù)。第一個參數(shù)是線性的區(qū)間分割方式(本質(zhì)上就是數(shù)組);第二個參數(shù)是指數(shù)的線性分割方式。第一種精確,第二種占用內(nèi)存少。上面的設(shè)置,如果我們有超過1分鐘的請求耗時,這個桶是放不下這種數(shù)據(jù)的。

然后,在需要記錄時間的地方調(diào)用如下方法。

histogram.recordValue(time);

結(jié)果分析

最后,我們使用output方法輸出測試結(jié)果即可。

HISTOGRAM.outputPercentileDistribution(System.out, 1000.0);

一個測試樣例結(jié)果如下:

Value     Percentile TotalCount 1/(1-Percentile)

0.000 0.000000000000 238 1.00
0.041 0.100000000000 208090 1.11
0.042 0.200000000000 620768 1.25
0.042 0.300000000000 620768 1.43
0.083 0.400000000000 820209 1.67
0.166 0.500000000000 1003029 2.00
1.541 0.550000000000 1117185 2.22
1.625 0.600000000000 1223882 2.50
1.667 0.650000000000 1325848 2.86
1.708 0.700000000000 1426775 3.33
1.750 0.750000000000 1566704 4.00
1.750 0.775000000000 1566704 4.44
1.792 0.800000000000 1658827 5.00
1.792 0.825000000000 1658827 5.71
1.875 0.850000000000 1717764 6.67
2.000 0.875000000000 1753302 8.00
2.251 0.887500000000 1778274 8.89
2.543 0.900000000000 1800741 10.00
3.043 0.912500000000 1825223 11.43
3.333 0.925000000000 1853576 13.33
3.459 0.937500000000 1883704 16.00
3.501 0.943750000000 1902088 17.78
3.501 0.950000000000 1902088 20.00
3.543 0.956250000000 1914577 22.86
3.625 0.962500000000 1932711 26.67
3.667 0.968750000000 1939228 32.00
3.709 0.971875000000 1944415 35.56
3.793 0.975000000000 1951960 40.00
3.875 0.978125000000 1956422 45.71
4.127 0.981250000000 1962509 53.33
4.459 0.984375000000 1969250 64.00
4.543 0.985937500000 1974203 71.11
4.583 0.987500000000 1976011 80.00
4.627 0.989062500000 1979231 91.43
4.711 0.990625000000 1982267 106.67
4.835 0.992187500000 1984844 128.00
4.919 0.992968750000 1985983 142.22
5.083 0.993750000000 1987744 160.00
5.251 0.994531250000 1989220 182.86
5.543 0.995312500000 1990682 213.33
5.919 0.996093750000 1992236 256.00
6.167 0.996484375000 1993013 284.44
6.543 0.996875000000 1993764 320.00
7.043 0.997265625000 1994539 365.71
7.667 0.997656250000 1995330 426.67
8.375 0.998046875000 1996133 512.00
8.959 0.998242187500 1996507 568.89
9.839 0.998437500000 1996884 640.00
10.879 0.998632812500 1997275 731.43
12.127 0.998828125000 1997660 853.33
13.879 0.999023437500 1998050 1024.00
14.879 0.999121093750 1998248 1137.78
16.295 0.999218750000 1998441 1280.00
18.175 0.999316406250 1998634 1462.86
20.223 0.999414062500 1998833 1706.67
23.503 0.999511718750 1999026 2048.00
26.511 0.999560546875 1999124 2275.56
29.583 0.999609375000 1999219 2560.00
33.183 0.999658203125 1999317 2925.71
37.343 0.999707031250 1999416 3413.33
43.071 0.999755859375 1999512 4096.00
47.103 0.999780273438 1999561 4551.11
53.183 0.999804687500 1999610 5120.00
61.471 0.999829101563 1999659 5851.43
77.823 0.999853515625 1999708 6826.67
97.087 0.999877929688 1999756 8192.00
117.759 0.999890136719 1999781 9102.22
143.231 0.999902343750 1999805 10240.00
171.519 0.999914550781 1999830 11702.86
224.255 0.999926757813 1999854 13653.33
289.279 0.999938964844 1999878 16384.00
325.375 0.999945068359 1999891 18204.44
375.295 0.999951171875 1999903 20480.00
422.143 0.999957275391 1999915 23405.71
499.711 0.999963378906 1999927 27306.67
581.119 0.999969482422 1999939 32768.00
685.567 0.999972534180 1999946 36408.89
769.023 0.999975585938 1999952 40960.00
844.799 0.999978637695 1999958 46811.43
1065.983 0.999981689453 1999964 54613.33
1352.703 0.999984741211 1999970 65536.00
1603.583 0.999986267090 1999973 72817.78
2529.279 0.999987792969 1999976 81920.00
2879.487 0.999989318848 1999979 93622.86
3221.503 0.999990844727 1999982 109226.67
5070.847 0.999992370605 1999985 131072.00
6287.359 0.999993133545 1999987 145635.56
6922.239 0.999993896484 1999988 163840.00
8085.503 0.999994659424 1999990 187245.71
10199.039 0.999995422363 1999991 218453.33
10600.447 0.999996185303 1999993 262144.00
30572.543 0.999996566772 1999994 291271.11
30572.543 0.999996948242 1999994 327680.00
31621.119 0.999997329712 1999995 374491.43
32817.151 0.999997711182 1999996 436906.67
32866.303 0.999998092651 1999997 524288.00
32866.303 0.999998283386 1999997 582542.22
32866.303 0.999998474121 1999997 655360.00
74186.751 0.999998664856 1999998 748982.86
74186.751 0.999998855591 1999998 873813.33
74842.111 0.999999046326 1999999 1048576.00
74842.111 0.999999141693 1999999 1165084.44
74842.111 0.999999237061 1999999 1310720.00
74842.111 0.999999332428 1999999 1497965.71
74842.111 0.999999427795 1999999 1747626.67
86114.303 0.999999523163 2000000 2097152.00
86114.303 1.000000000000 2000000
#[Mean = 1.357, StdDeviation = 108.037]
#[Max = 86114.303, Total count = 2000000]
#[Buckets = 24, SubBuckets = 2048]

Percentile就是百分位。一般的業(yè)務(wù)關(guān)注TP95,要求較高的業(yè)務(wù)關(guān)注TP99,甚至TP99.99,上面的測試結(jié)果也提供了這種細分。當然,精度是在我們的構(gòu)造參數(shù)里就提供了的,這些數(shù)據(jù)非常可信。

結(jié)果的下面是一些統(tǒng)計信息。比如,我的這段關(guān)鍵代碼,調(diào)用了2000000次,每個調(diào)用都在1.3ns左右,但最大的也有86114.303ns。

至于最后的Buckets和SubBuckets,就涉及到HdrHistogram的一些內(nèi)部原理,也就是內(nèi)部的一些參數(shù),我們倒可以不用關(guān)注它。

End

HdrHistogram是為了追求性能和穩(wěn)定性的代碼而生的,它才是真正的平均主義--希望所有的請求盡量的平均,沒有長尾請求。

比如證券交易系統(tǒng),你肯定不想自己的那筆單子正好碰上千萬分之一的那種延遲。

一般這樣的服務(wù),對GC也有較高的要求,容不得半點延遲。像CMS這種動不動就Full GC的垃圾回收器,自然是不適合使用的。

評判服務(wù)的響應(yīng)能力,除了一些耳熟能詳?shù)慕y(tǒng)計工具,必要的時候,我們還可以祭出更強大的工具,來助力達成這個目標。

HdrHistogram顯然就是這種存在,你一定不想錯過它。

作者簡介:小姐姐味道  (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。


網(wǎng)頁題目:優(yōu)秀Java才懂的,長尾請求Hack工具!
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/djpiscd.html