java定时器克隆方式,Java-DropWizard指标计量器与计时器
您之所以會(huì)感到困惑,部分原因是DW Metrics Timer IS是DW Metrics Meter。
儀表專用于速率,單位為Hz(事件每秒)。 每個(gè)儀表都會(huì)發(fā)布4(?)個(gè)不同的指標(biāo):
自指標(biāo)開(kāi)始以來(lái)的平均(平均)率
1、5和15分鐘的滾動(dòng)平均費(fèi)率
您可以通過(guò)在代碼的不同點(diǎn)記錄一個(gè)值來(lái)使用儀表-DW Metrics會(huì)自動(dòng)記下每個(gè)呼叫的掛墻時(shí)間以及您給它的值,并使用這些來(lái)計(jì)算該值的增加速率:
Meter getRequests = registry.meter("some-operation.operations")
getRequests.mark() //resets the value, e.g. sets it to 0
int numberOfOps = doSomeNumberOfOperations() //takes 10 seconds, returns 333
getRequests.mark(numberOfOps) //sets the value to number of ops.
我們期望速率為33.3 Hz,因?yàn)榘l(fā)生了333次操作,兩次調(diào)用mark()之間的時(shí)間為10秒。
計(jì)時(shí)器計(jì)算以上四個(gè)指標(biāo)(將每個(gè)Timer.Context視為一個(gè)事件),并向其中添加許多其他指標(biāo):
事件數(shù)量的計(jì)數(shù)
自指標(biāo)開(kāi)始以來(lái)的最小,平均和最大持續(xù)時(shí)間
標(biāo)準(zhǔn)偏差
一個(gè)“直方圖”,記錄在第50、97、98、99和99.95個(gè)百分位數(shù)上分配的持續(xù)時(shí)間
每個(gè)計(jì)時(shí)器總共報(bào)告15個(gè)指標(biāo)。
簡(jiǎn)而言之:計(jì)時(shí)器報(bào)告很多指標(biāo),要理解它們可能很棘手,但是一旦您這樣做,它們便是發(fā)現(xiàn)棘手行為的一種非常有效的方法。
事實(shí)是,僅收集兩點(diǎn)之間花費(fèi)的時(shí)間并不是一個(gè)非常有用的指標(biāo)。 考慮:您有如下代碼塊:
Timer timer = registry.timer("costly-operation.service-time")
Timer.Context context = timer.time()
costlyOperation() //service time 10 ms
context.stop()
假設(shè)costlyOperation()具有不變的成本,不變的負(fù)載并且在單個(gè)線程上運(yùn)行。 在1分鐘的報(bào)告期內(nèi),我們應(yīng)該預(yù)計(jì)此操作的時(shí)間為6000次。 顯然,我們不會(huì)通過(guò)6000x線路報(bào)告實(shí)際的服務(wù)時(shí)間-而是需要某種方式來(lái)匯總所有這些操作,以適合我們所需的報(bào)告窗口。 DW Metrics的計(jì)時(shí)器每分鐘(我們的報(bào)告期間)為我們自動(dòng)執(zhí)行一次。 5分鐘后,我們的指標(biāo)注冊(cè)表將報(bào)告:
速率為100(每秒事件)
1分鐘的平均速率為100
5分鐘的平均速度為100
計(jì)數(shù)為30000(看到的事件總數(shù))
最多10(ms)
最少10分鐘
平均10
第50個(gè)百分點(diǎn)(p50)的值為10
99.9個(gè)百分點(diǎn)(p999)的值為10
現(xiàn)在,讓我們考慮進(jìn)入一個(gè)時(shí)期,有時(shí)我們的操作會(huì)長(zhǎng)時(shí)間脫離軌道和障礙:
Timer timer = registry.timer("costly-operation.service-time")
Timer.Context context = timer.time()
costlyOperation() //takes 10 ms usually, but once every 1000 times spikes to 1000 ms
context.stop()
在1分鐘的收集時(shí)間內(nèi),由于每千次執(zhí)行需要更長(zhǎng)的時(shí)間,因此現(xiàn)在將看到少于6000次執(zhí)行。 得出大約5505的信息。經(jīng)過(guò)第一分鐘(系統(tǒng)總時(shí)間為6分鐘),我們現(xiàn)在將看到:
平均速率98(每秒事件)
1分鐘平均率為91.75
5分鐘平均率為98.35
計(jì)數(shù)為35505(看到的事件總數(shù))
最長(zhǎng)持續(xù)時(shí)間1000(ms)
最小持續(xù)時(shí)間為10
平均持續(xù)時(shí)間10.13
第50個(gè)百分點(diǎn)(p50)的值為10
99.9個(gè)百分點(diǎn)(p999)的值為1000
如果將其繪制成圖形,您會(huì)看到大多數(shù)請(qǐng)求(p50,p75,p99等)在10毫秒內(nèi)完成,但是每1000個(gè)請(qǐng)求(p99)中的一個(gè)請(qǐng)求在1秒內(nèi)完成。 這也將被視為平均速度略有降低(約2%),平均1分鐘的幅度顯著降低(將近9%)。
如果僅查看超時(shí)時(shí)間平均值(速率或持續(xù)時(shí)間),您將永遠(yuǎn)不會(huì)發(fā)現(xiàn)這些尖峰-如果對(duì)許多成功操作進(jìn)行平均,它們就會(huì)被拖入背景噪聲中。 同樣,僅知道最大值也無(wú)濟(jì)于事,因?yàn)樗粫?huì)告訴您最大值發(fā)生的頻率。 這就是為什么直方圖是跟蹤性能的強(qiáng)大工具的原因,也是DW Metrics的計(jì)時(shí)器同時(shí)發(fā)布比率和直方圖的原因。
總結(jié)
以上是生活随笔為你收集整理的java定时器克隆方式,Java-DropWizard指标计量器与计时器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用python计算准确率_分词结果准确率
- 下一篇: java immutable系列_Jav