Hbase源码分析:Hbase UI中Requests Per Second的具体含义

时间:2022-09-08 22:51:28

Hbase源码分析:Hbase UI中Requests Per Second的具体含义

  让运维加监控,被问到Requests Per Second(见下图)的具体含义是什么?我一时竟回答不上来,虽然大概知道它是指每秒Region Server的请求数,但是具体是怎么算的呢,不清楚。于是决定通过研究源码深入了解下。下面便记录了这个过程。

Hbase源码分析:Hbase UI中Requests Per Second的具体含义

1,先在代码库中全局搜索Requests Per Second关键字,发现在几个jamon结尾的文件找到了。于是google了一下,这个到底是什么东东,发现是一个模板引擎。

Hbase源码分析:Hbase UI中Requests Per Second的具体含义

2,查看RegionServerListTmpl.jamon内容,需要传入参数List<ServerName> servers和HMaster master。并且这个模板引擎是在MasterStatusServlet.java的doGet方法中被render的。抛开这些,看下面一段代码,就知道Requests Per Second是怎么来的呢?

Hbase源码分析:Hbase UI中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>
Hbase源码分析:Hbase UI中Requests Per Second的具体含义

其中requestsPerSecond变量的值就是我们要找的。可以看出来是来自ServerLoad中的getRequestsPerSecond函数。

3,继续查看ServerLoad中的getRequestsPerSecond函数,经过getRequestsPerSecond-》getNumberofRequests发现是serverLoad.getNumberOfRequests中的numberOfRequests_变量的值。

4,  那ClusterStatusProtos.ServerLoad中的numberOfRequests_是怎么来的呢?在HRegionServer中buildServerLoad函数中,可以看到是从MetricsRegionServerWrapperImpl中的requestsPerSecond获取的

1 serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());

5,那MetricsRegionServerWrapperImpl中的requestsPerSecond是怎么算的呢?从下面代码可以看出是根据上次的总的请求次数和请求时间,以及当前总的请求次数和请求时间,通过相减,然后除以时间差计算出来的。

Hbase源码分析:Hbase UI中Requests Per Second的具体含义
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;    
Hbase源码分析:Hbase UI中Requests Per Second的具体含义

6,getTotalRequestCount()返回的是regionServer.rpcServices.requestCount的值。而requestCount表示的是regionserver中rpcserver记录的rpc请求次数,每当一个rpc请求(比方说flush,getOnlineRegion等)过来的时候,这个值便会加1. 至此,便很清楚了,Requests Per Second具体的含义就是当前region server中每秒接收到的rpc请求数。

小结:

通过以上分析过程,搞清楚了Requests Per Second的具体含义,感觉结果不是很重要,重要的是过程,通过查看,调试源码深入了解hbase的细节。

Hbase源码分析:Hbase UI中Requests Per Second的具体含义的更多相关文章

  1. angular源码分析:angular中脏活累活的承担者之&dollar;interpolate

    一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...

  2. angular源码分析:angular中入境检察官&dollar;sce

    一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...

  3. angular源码分析:angular中各种常用函数,比较省代码的各种小技巧

    angular的工具函数 在angular的API文档中,在最前面就是讲的就是angular的工具函数,下面列出来 angular.bind //用户将函数和对象绑定在一起,返回一个新的函数 angu ...

  4. angular源码分析:angular中的依赖注入式如何实现的

    一.准备 angular的源码一份,我这里使用的是v1.4.7.源码的获取,请参考我另一篇博文:angular源码分析:angular源代码的获取与编译环境安装 二.什么是依赖注入 据我所知,依赖注入 ...

  5. Hbase源码分析:RPC概况

    RPC是hbase中Master,RegionServer和Client三者之间通信交流的纽带.了解hbase的rpc机制能够为通过源码学习hbase奠定良好的基础.因为了解了hbase的rpc机制能 ...

  6. angular源码分析:angular中&dollar;rootscope的实现——scope的一生

    在angular中,$scope是一个关键的服务,可以被注入到controller中,注入其他服务却只能是$rootscope.scope是一个概念,是一个类,而$rootscope和被注入到cont ...

  7. angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了

    一.从function JQLite(element)函数开始. function JQLite(element) { if (element instanceof JQLite) { //情况1 r ...

  8. lodash源码分析之compact中的遍历

    小时候, 乡愁是一枚小小的邮票, 我在这头, 母亲在那头. 长大后,乡愁是一张窄窄的船票, 我在这头, 新娘在那头. 后来啊, 乡愁是一方矮矮的坟墓, 我在外头, 母亲在里头. 而现在, 乡愁是一湾浅 ...

  9. lodash源码分析之baseFindIndex中的运算符优先级

    我悟出权力本来就是不讲理的--蟑螂就是海米:也悟出要*,内心必须强大到足以承受任何后果才行. --北岛<城门开> 本文为读 lodash 源码的第十篇,后续文章会更新到这个仓库中,欢迎 ...

随机推荐

  1. centos svn服务器搭建

    1.安装svnyum install subversion查看安装目录rpm -ql subversion 查看yum安装subversion的位置 2.创建仓库创建版本库目录mkdir -p /va ...

  2. IL速查

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...

  3. Number类型

    这是计算基础,复杂的以后不充. 1.Number(); var box = { toString :function(){ return '123'; } }; alert(Number(box)); ...

  4. &lbrack;jQuery&rsqb; &dollar;&period;grep使用

    1.$.grep的功能是查找过滤功能的数组,原数组不受影响. 2.参数定义 jQuery.grep( array, function(elementOfArray, indexInArray), [ ...

  5. C&num; 6&period;0 &lpar;C&num; vNext&rpar; 的新功能:Expression Bodied Functions and Properties

    Expression Bodied Function 它可以用在: methods user-defined operators type conversions read-only properti ...

  6. Puppent 基本使用方法

    简单的文件配置 master端 vim /etc/puppet/manifests/site.pp ###########################内容如下 node default{ file ...

  7. svn冲突文件解决方法

    svn冲突文件解决方法 工具/原料 svn客户端 方法/步骤 1 通过SVN客户端更新需要的文件,如果出现有感叹号的文件,找到出现感叹号的文件. 2 选择感叹号文件,即冲突文件,单击鼠标右键对冲突文件 ...

  8. 【洛谷P2584】【ZJOI2006】GameZ游戏排名系统题解

    [洛谷P2584][ZJOI2006]GameZ游戏排名系统题解 题目链接 题意: GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在 ...

  9. 递归删除服务器log文件

    ## 进入logs根文件夹 cd /home/admin/logs ## 删除所有的log文件 find . -name "*.log.*" | xargs rm -f

  10. lua -- 生成协议

    这是爬塔的协议 <?xml version="1.0" encoding="utf-8" ?> <coder name="Tower ...