当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

让运维加监控,被问到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的细节。

转载于:https://my.oschina.net/sniperLi/blog/1543497

相关文章:

  • LINUX KERNEL SPINLOCK使用不当的后果
  • android——Tinker启蒙,献给热修复一脸懵逼的自己
  • Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
  • python 模块包裹
  • no.6 字符串和格式化输入/输出02
  • 从零开始编写自己的C#框架(18)——Web层后端权限模块——菜单管理
  • jquery操作字符串常用方法总结及工作代码
  • retrofit post请求多文件,partMap用法
  • 【转载】Etcd+Confd实现Nginx配置文件自动管理
  • C#编程(五十五)----------HashSet和SortedSet
  • 云非万能!云计算不能解决的三大问题
  • maven打包加速(转) (开启多线程,之前发现只占用一核CPU100%,其他CPU闲置的情况)...
  • Android Studio 入门级教程
  • lua中实现倒计时
  • 条款7:为多态基类声明virtual析构函数
  • [译]Python中的类属性与实例属性的区别
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【技术性】Search知识
  • Android框架之Volley
  • CAP 一致性协议及应用解析
  • es6要点
  • Git 使用集
  • HashMap剖析之内部结构
  • iOS编译提示和导航提示
  • JavaWeb(学习笔记二)
  • JSDuck 与 AngularJS 融合技巧
  • React as a UI Runtime(五、列表)
  • SAP云平台里Global Account和Sub Account的关系
  • Vue学习第二天
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从零搭建Koa2 Server
  • 订阅Forge Viewer所有的事件
  • 分类模型——Logistics Regression
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 前端性能优化——回流与重绘
  • AI算硅基生命吗,为什么?
  • 如何用纯 CSS 创作一个货车 loader
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (06)Hive——正则表达式
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (转)3D模板阴影原理
  • (转)Linq学习笔记
  • (转载)(官方)UE4--图像编程----着色器开发
  • (转载)Linux网络编程入门
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net CHARTING图表控件下载地址
  • .NET Core 中插件式开发实现
  • .net mvc部分视图
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 指南:抽象化实现的基类
  • :=