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

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

2,查看RegionServerListTmpl.jamon内容,需要传入参数List<ServerName> servers和HMaster master。并且这个模板引擎是在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函数。
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是怎么算的呢?从下面代码可以看出是根据上次的总的请求次数和请求时间,以及当前总的请求次数和请求时间,通过相减,然后除以时间差计算出来的。

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请求次数,每当一个rpc请求(比方说flush,getOnlineRegion等)过来的时候,这个值便会加1. 至此,便很清楚了,Requests Per Second具体的含义就是当前region server中每秒接收到的rpc请求数。
小结:
通过以上分析过程,搞清楚了Requests Per Second的具体含义,感觉结果不是很重要,重要的是过程,通过查看,调试源码深入了解hbase的细节。
Hbase源码分析:Hbase UI中Requests Per Second的具体含义的更多相关文章
- angular源码分析:angular中脏活累活的承担者之$interpolate
一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...
- angular源码分析:angular中入境检察官$sce
一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...
- angular源码分析:angular中各种常用函数,比较省代码的各种小技巧
angular的工具函数 在angular的API文档中,在最前面就是讲的就是angular的工具函数,下面列出来 angular.bind //用户将函数和对象绑定在一起,返回一个新的函数 angu ...
- angular源码分析:angular中的依赖注入式如何实现的
一.准备 angular的源码一份,我这里使用的是v1.4.7.源码的获取,请参考我另一篇博文:angular源码分析:angular源代码的获取与编译环境安装 二.什么是依赖注入 据我所知,依赖注入 ...
- Hbase源码分析:RPC概况
RPC是hbase中Master,RegionServer和Client三者之间通信交流的纽带.了解hbase的rpc机制能够为通过源码学习hbase奠定良好的基础.因为了解了hbase的rpc机制能 ...
- angular源码分析:angular中$rootscope的实现——scope的一生
在angular中,$scope是一个关键的服务,可以被注入到controller中,注入其他服务却只能是$rootscope.scope是一个概念,是一个类,而$rootscope和被注入到cont ...
- angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了
一.从function JQLite(element)函数开始. function JQLite(element) { if (element instanceof JQLite) { //情况1 r ...
- lodash源码分析之compact中的遍历
小时候, 乡愁是一枚小小的邮票, 我在这头, 母亲在那头. 长大后,乡愁是一张窄窄的船票, 我在这头, 新娘在那头. 后来啊, 乡愁是一方矮矮的坟墓, 我在外头, 母亲在里头. 而现在, 乡愁是一湾浅 ...
- lodash源码分析之baseFindIndex中的运算符优先级
我悟出权力本来就是不讲理的--蟑螂就是海米:也悟出要造反,内心必须强大到足以承受任何后果才行. --北岛<城门开> 本文为读 lodash 源码的第十篇,后续文章会更新到这个仓库中,欢迎 ...
随机推荐
- 《Thinking in C++》学习笔记(一)【第二章】
第二章 对象的创建与使用 2.1语言的翻译过程 翻译器分为两类:解释器(interpreter)和编译器(compiler). 2.1.1解释器 解释器将源代码转化成一些动作(它可由许多机器指令组成) ...
- redis rdb
http://blog.chinaunix.net/uid-1757778-id-3977331.html
- 传说中的WCF(3):多个协定
我们知道,WCF服务端是先定义服务协定,其实就是一个接口,然后通过实现接口来定义服务类.那么,有一个问题,如果一个服务类同时实现N个接口(也就是有N个协定)呢?结果会如何? 不必猜,我们还是通过实验来 ...
- poj 1511(SPFA+邻接表)
题目链接:http://poj.org/problem?id=1511 思路:题目意思很简单就是要求源点到各点的最短路之和,然后再求各点到源点的最短路之和,其实就是建两个图就ok了,其中一个建反图.1 ...
- intelli IDEA node开发代码提示问题
好几天没写代码了,今天新建一个项目,在引入rs这个文件系统模块时却没有关于这个模块的代码提示,着实令人恶心啊.还好最终解决了. 在没有代码提示的时候点击如下图标: 出现如下的界面,其中有个Edit u ...
- JavaScript. The core.
Read this article in: Japanese, German (version 2), Arabic, Russian, French, Chinese. An object A pr ...
- hdu2024C语言合法标识符
#include<iostream> #include<stdio.h> #include<math.h> #include<stdlib.h> #in ...
- 天使投资、VC 以及 PE 的区别是什么?
如果满足于“阶段不同”这个简单的回答,那你可能错过了一个思考资本与企业发展之间关系的机会. 首先要交待一下,在大众语境中,angel/VC/PE三者都可认为是VC,也就是人们常说的风险投资,在国内官方 ...
- Gravitational Teleport 是一个先进的 SSH 服务器,基于 Golang SSH 构建,完全兼容 OpenSSH
Gravitational Teleport 是一个先进的 SSH 服务器,可通过 SSH 或者 HTTPS 远程访问 Linux 服务器.其目的是为了替代 sshd.Teleport 可以轻松让团队 ...
- Delphi操作XML的几个博客
http://www.cnblogs.com/acuier 整整十几篇,省得我自己研究,学一下就可以了. http://www.cnblogs.com/del/category/113561.htm ...