hbase性能监控(二)

3 hbase regionserver中RPC metric的计算采集

Hbase中统计RPC的数据较为简单。主要是统计在两次发送间隔内的RPC的请求的数量以及平均请求的处理时间,前面提到的HBaseRpcMetrics类的对象负责采集这些metric。

RPC统计主要是HMasterInterface、HMasterRegionInterface、HRegionInterface、HBaseRPCErrorHandler和OnlineRegions这五个接口中声明的方法。对于每个方法,采用了一个MetricsTimeVaryingRate对象来存储数据,这些对象和方法名称作为hash的value和key存入HBaseRpcMetrics中的一张map对象中。

在regionserver的handler线程调用RPC时,会记录调用前后花费的时间,将花费的时间存储到对应的MetricsTimeVaryingRate对象,这个操作会更新MetricsTimeVaryingRate对象中两个成员变量,这两个成员变量记录了从某个时间点(上次发送数据给gmond的时间)以来所接受的请求次数和处理请求的累积时间。

每隔10秒(当前配置文件中指定的发送数据的时间间隔是10秒钟),HBaseRpcMetrics中的doUpdates方法会被GangliaContext31父类中的定时任务调用,来将当前统计的数据推送到缓冲区中。HBaseRpcMetrics中的doUpdates方法主要是将每个MetricsTimeVaryingRate对象中累积的处理时间除以累积的处理次数,来获得该RPC的平均处理时间,将平均的处理时间和累积的操作次数推送到GangliaContext31父类的缓冲区中,然后将累积的处理时间和累积处理次数这两个变量重置,来准备下个固定时间间隔内的数据采集。

对于RPC的统计来说,监控数据的采集和推送是两个异步的过程。

在gmeta的进程所在机器上,在gmetad配置文件的配置项rrd_rootdir所指定的目录下,可以看到每个hbase集群都有一个相应的目录,目录下有各个机器对应的子目录。可以在各个机器的子目录下看到各个RPC的RDD文件,例如,对于checkAndPut请求,存在rpc.metrics.checkAndPut_num_ops.rrd和rpc.metrics.checkAndPut_avg_time.rrd文件,存储了该机器上checkAndPut请求数量和处理平均时间,可以通过rrdtool dump file-name来简单的查看监控数据.

RPC的监控项的数据,主要存储在ganglia数据目录的某个主机名做目录名称的子目录下,以rpc.metrics.为前缀的rrd文件中,主要对某个RPC请求的次数以及平均操作时间的统计。下面是对RPC相关的监控项的说明

 

metric rrd文件 含义
rpc.metrics.R_avg_time.rrd 在固定间隔内R的平均操作时间
rpc.metrics.R_num_ops.rrd 在固定间隔内请求R的次数
rpc.metrics.RpcQueueTime_avg_time.rrd RPC在call队列中等待平均时间
rpc.metrics.RpcQueueTime_num_ops.rrd RPC在call队列中等待的数量
rpc.metrics.RpcProcessingTime_avg_time.rrd 平均处理一个RPC所消耗时间
rpc.metrics.RpcProcessingTime_num_ops.rrd 实际处理RPC的数量

4  hbase JVM 监控数据的计算采集

   Hbase中对于JVM的监控数据,主要是JvmMetrics的对象来进行的,该对象在HRegionServer()的run方法中被实例化。

   JvmMetrics主要统计的信息包括:内存的使用状态信息;GC的统计信息;线程的统计信息;以及事件的统计信息。

   内存的统计信息主要是:JVM当前已经使用的NonHeapMemory的大小、以及配置的NonHeapMemory的大小;JVM当前已经使用的HeapMemory的大小、以及配置的HeapMemory的大小;已经JVM运行时的可以使用的最大的内存的大小。内存的统计信息主要借助JVM的接口来获得,这些数据均以兆为单位发送到gmond中。

   GC的统计较为简单,仅统计了进程在固定间隔内GC的次数和花费的总时间。

   线程的统计,主要是统计进程内当前线程的处于NEW 、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED这六种状态下的线程数量。

   对于事件的统计,主要统计固定时间间隔内的Fatal、Error、Warn以及Info的数量。

   由于这部分需要采集的数据较少,JVM中数据的采集和推送都是由GangliaContext31父类中的定时任务调用doUpdates来完成的,并不像RPC那样分作两个异步的阶段来进行。

       同样地,对于JVM的监控数据,存储在对应的主机目录下、以jvm.metrics.为前缀的rrd文件中。下面是对监控项的说明:

metric rrd文件 说明
jvm.metrics.gcCount.rrd JVM进行GC的次数
jvm.metrics.gcTimeMillis.rrd GC花费的时间,单位为微妙
jvm.metrics.logError.rrd Log中输出ERROR的次数
jvm.metrics.logFatal.rrd Log中输出FATAL的次数
jvm.metrics.logInfo.rrd Log中输出INFO的次数
jvm.metrics.logWarn.rrd Log中输出WARN的次数
jvm.metrics.maxMemoryM.rrd JVM最大的可用内存大小(单位:M)
jvm.metrics.memHeapCommittedM.rrd JVM分配的堆大小(单位:M)
jvm.metrics.memHeapUsedM.rrd JVM已经使用的堆大小(单位M)
jvm.metrics.memNonHeapCommittedM.rrd JVM分配给非堆的大小(单位M)
jvm.metrics.memNonHeapUsedM.rrd JVM已使用的非堆的大小(单位M)
jvm.metrics.threadsBlocked.rrd 处于BLOCKED状态线程数量
jvm.metrics.threadsNew.rrd 处于NEW状态线程数量
jvm.metrics.threadsRunnable.rrd 处于RUNNABLE状态线程数量
jvm.metrics.threadsTerminated.rrd 处于TERMINATED状态线程数量
jvm.metrics.threadsTimedWaiting.rrd 处于TIMED_WAITING状态线程数量
jvm.metrics.threadsWaiting.rrd 处于WAITING状态线程数量

 


我来评几句
登录后评论

已发表评论数()

相关站点

热门文章