跳到主要内容

SkyWalking 源码分析 JVM 指标的收集与存储

1. 概述

本文主要分享 SkyWalking JVM 指标的收集与存储。大体流程如下:

  • Agent 每秒定时收集 JVM 指标到缓冲队列。
  • Agent 每秒定时将缓冲队列的 JVM 指标发送到 Collector 。
  • Collector 接收到 JVM 指标,异步批量存储到存储器( 例如,ES )。

目前JVM 指标包括四个维度

  • CPU
  • Memory
  • MemoryPool
  • GC

SkyWalking UI 界面如下:

 

2. Agent 收集 JVM 指标

2.1 JVMService

org.skywalking.apm.agent.core.jvm.JVMService ,实现 BootService 、Runnable 接口,JVM 指标服务,负责将 JVM 指标收集并发送给 Collector 。代码如下:

  • queue 属性,收集指标队列。
  • collectMetricFuture 属性,收集指标定时任务。
  • sendMetricFuture 属性,发送指标定时任务。
  • sender 属性,发送器。

#beforeBoot() 方法,初始化 queue ,sender 属性,并将自己添加到 GRPCChannelManager ,从而监听与 Collector 的连接状态。