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的具体含义相关推荐

  1. HBase源码分析之HRegion上compact流程分析(三)

    在<HBase源码分析之HRegion上compact流程分析(二)>一文中,我们没有讲解真正执行合并的CompactionContext的compact()方法.现在我们来分析下它的具体 ...

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

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

  3. apollo源码分析 感知_Kitty中的动态线程池支持Nacos,Apollo多配置中心了

    目录 回顾昨日 nacos 集成 Spring Cloud Alibaba 方式 Nacos Spring Boot 方式 Apollo 集成 自研配置中心对接 无配置中心对接 实现源码分析 兼容 A ...

  4. 「源码分析」CopyOnWriteArrayList 中的隐藏知识,你Get了吗?

    前言 本觉 CopyOnWriteArrayList 过于简单,寻思看名字就能知道内部的实现逻辑,所以没有写这篇文章的想法,最近又仔细看了下 CopyOnWriteArrayList 的源码实现,大体 ...

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

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

  6. [pig4cloud框架源码分析] 03 - MyBatis中的sql语句日志打印

    文章目录 导读 pig4cloud框架配置 Mybatis Log Plugin 插件开启方式 插件说明 [TODO]源码分析 拦截器方案实现sql日志查看 参考资料 导读 使用MyBatis开发过程 ...

  7. UGUI源码分析:LayoutGroup中的纵横布局组件(HorizontalOrVerticalLayoutGroup)

    系列 UGUI源码分析系列总览 相关前置: UGUI CanvasUpdateSystem源码分析 UGUI源码分析:LayoutSystem布局系统 文章目录 系列 UML图一览 LayoutGro ...

  8. HBase源码分析:HTable put过程

    HBase版本:0.94.15-cdh4.7.0 在 HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入.删除.查询数据都需要先找到相应的 RegionServer ...

  9. 【FFMPEG源码分析】ffmpeg中context与AVClass,AVOption之间的关系

    通过前面三篇文章的分析大致了解了ffmpeg中demuxer/decoder模块的内部大致结构和数据处理流程.在阅读源码的过程中经常会看到XXXContext,AVClass xxx_class, A ...

最新文章

  1. Carrier frequency 和 EARFCN的关系
  2. 深度学习之梯度下降法
  3. cenots6 系统服务优化
  4. Linux命令之at
  5. 福建2020年3月计算机二级报名时间,福建2020年3月计算机二级考试报名时间安排...
  6. java 编程思想 笔记_java编程思想笔记20170215
  7. mysql之存储引擎和文件配置
  8. spring mvc学习(11):eclipse的环境maven项目创建前期工作
  9. 关于微信小程序swiper的问题
  10. [Err] 22007 - [SQL Server]从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
  11. Hive 导入CSV文件
  12. android 数据库 字节数组,java - 如何使用活动的android序列化字节数组并将其存储到数据库中? - 堆栈内存溢出...
  13. Mac的一些使用技巧
  14. 监控手机屏幕、监控电脑屏幕方案
  15. 合唱队形(DP算法入门)
  16. Matlab实现图像识别(一)
  17. Android Q - 设置默认输入法
  18. HTTPS之SNI介绍
  19. python:实现balanced parentheses平衡括号表达式算法(附完整源码)
  20. Linux之sudo自动输入密码

热门文章

  1. Qt 获取文件夹下所有文件
  2. GitHub地图转误差坐标
  3. C基础--字符串操作函数(strlen,strcpy,strcmp,strcat,strstr,strtok,strchr)
  4. 有线路由器与无线路由器混合使用
  5. 基于 REST 的 Web 服务:基础
  6. 创建支持ssh的docker镜像
  7. 图像的打开、修改、显示和保存示例(OpenCV 2.0)
  8. c++构造函数以及类中变量初始化顺序
  9. TS流的解码过程-ES-PES-DTS-PTS-PCR
  10. DeepLearning tutorial(1)Softmax回归原理简介+代码详解