Hbase源码分析:Hbase UI中Requests Per Second的具体含义
生活随笔
收集整理的這篇文章主要介紹了
Hbase源码分析:Hbase UI中Requests Per Second的具体含义
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Hbase源碼分析:Hbase UI中Requests Per Second的具體含義
讓運(yùn)維加監(jiān)控,被問到Requests Per Second(見下圖)的具體含義是什么?我一時(shí)竟回答不上來,雖然大概知道它是指每秒Region Server的請求數(shù),但是具體是怎么算的呢,不清楚。于是決定通過研究源碼深入了解下。下面便記錄了這個(gè)過程。
1,先在代碼庫中全局搜索Requests Per Second關(guān)鍵字,發(fā)現(xiàn)在幾個(gè)jamon結(jié)尾的文件找到了。于是google了一下,這個(gè)到底是什么東東,發(fā)現(xiàn)是一個(gè)模板引擎。
2,查看RegionServerListTmpl.jamon內(nèi)容,需要傳入?yún)?shù)List<ServerName> servers和HMaster master。并且這個(gè)模板引擎是在MasterStatusServlet.java的doGet方法中被render的。拋開這些,看下面一段代碼,就知道Requests Per Second是怎么來的呢?
1 <%java>2 int totalRegions = 0;3 int totalRequests = 0;4 for (ServerName serverName: serverNames) {5 6 ServerLoad sl = master.getServerManager().getLoad(serverName);7 double requestsPerSecond = 0.0;8 int numRegionsOnline = 0;9 10 if (sl != null) { 11 requestsPerSecond = sl.getRequestsPerSecond(); 12 numRegionsOnline = sl.getNumberOfRegions(); 13 totalRegions += sl.getNumberOfRegions(); 14 // Is this correct? Adding a rate to a measure. 15 totalRequests += sl.getNumberOfRequests(); 16 } 17 long startcode = serverName.getStartcode(); 18 </%java>其中requestsPerSecond變量的值就是我們要找的。可以看出來是來自ServerLoad中的getRequestsPerSecond函數(shù)。
3,繼續(xù)查看ServerLoad中的getRequestsPerSecond函數(shù),經(jīng)過getRequestsPerSecond-》getNumberofRequests發(fā)現(xiàn)是serverLoad.getNumberOfRequests中的numberOfRequests_變量的值。
4, ?那ClusterStatusProtos.ServerLoad中的numberOfRequests_是怎么來的呢?在HRegionServer中buildServerLoad函數(shù)中,可以看到是從MetricsRegionServerWrapperImpl中的requestsPerSecond獲取的
1 serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());5,那MetricsRegionServerWrapperImpl中的requestsPerSecond是怎么算的呢?從下面代碼可以看出是根據(jù)上次的總的請求次數(shù)和請求時(shí)間,以及當(dāng)前總的請求次數(shù)和請求時(shí)間,通過相減,然后除以時(shí)間差計(jì)算出來的。
if (lastRan == 0) {lastRan = currentTime - period;}//If we've time traveled keep the last requests per second.if ((currentTime - lastRan) > 0) {long currentRequestCount = getTotalRequestCount();requestsPerSecond = (currentRequestCount - lastRequestCount) /((currentTime - lastRan) / 1000.0);lastRequestCount = currentRequestCount;}lastRan = currentTime;6,getTotalRequestCount()返回的是regionServer.rpcServices.requestCount的值。而requestCount表示的是regionserver中rpcserver記錄的rpc請求次數(shù),每當(dāng)一個(gè)rpc請求(比方說flush,getOnlineRegion等)過來的時(shí)候,這個(gè)值便會加1. 至此,便很清楚了,Requests Per Second具體的含義就是當(dāng)前region server中每秒接收到的rpc請求數(shù)。
小結(jié):
通過以上分析過程,搞清楚了Requests Per Second的具體含義,感覺結(jié)果不是很重要,重要的是過程,通過查看,調(diào)試源碼深入了解hbase的細(xì)節(jié)。
總結(jié)
以上是生活随笔為你收集整理的Hbase源码分析:Hbase UI中Requests Per Second的具体含义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GNU/Linux下LVM配置管理以及快
- 下一篇: APP上传流程总结