聊聊skywalking的CPUProvider
2020/2/26 17:16:29
本文主要是介绍聊聊skywalking的CPUProvider,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
序
本文主要研究一下skywalking的CPUProvider
CPUProvider
skywalking-6.6.0/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/cpu/CPUProvider.java
public enum CPUProvider { INSTANCE; private CPUMetricsAccessor cpuMetricsAccessor; CPUProvider() { int processorNum = ProcessorUtil.getNumberOfProcessors(); try { this.cpuMetricsAccessor = (CPUMetricsAccessor)CPUProvider.class.getClassLoader().loadClass("org.apache.skywalking.apm.agent.core.jvm.cpu.SunCpuAccessor") .getConstructor(int.class).newInstance(processorNum); } catch (Exception e) { this.cpuMetricsAccessor = new NoSupportedCPUAccessor(processorNum); ILog logger = LogManager.getLogger(CPUProvider.class); logger.error(e, "Only support accessing CPU metrics in SUN JVM platform."); } } public CPU getCpuMetric() { return cpuMetricsAccessor.getCPUMetrics(); } } 复制代码
- CPUProvider的构造会实例化org.apache.skywalking.apm.agent.core.jvm.cpu.SunCpuAccessor;其getCpuMetric则通过cpuMetricsAccessor.getCPUMetrics()获取CPU信息
CPUMetricsAccessor
skywalking-6.6.0/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/cpu/CPUMetricsAccessor.java
public abstract class CPUMetricsAccessor { private long lastCPUTimeNs; private long lastSampleTimeNs; private final int cpuCoreNum; public CPUMetricsAccessor(int cpuCoreNum) { this.cpuCoreNum = cpuCoreNum; } protected void init() { lastCPUTimeNs = this.getCpuTime(); lastSampleTimeNs = System.nanoTime(); } protected abstract long getCpuTime(); public CPU getCPUMetrics() { long cpuTime = this.getCpuTime(); long cpuCost = cpuTime - lastCPUTimeNs; long now = System.nanoTime(); try { CPU.Builder cpuBuilder = CPU.newBuilder(); return cpuBuilder.setUsagePercent(cpuCost * 1.0d / ((now - lastSampleTimeNs) * cpuCoreNum) * 100).build(); } finally { lastCPUTimeNs = cpuTime; lastSampleTimeNs = now; } } } 复制代码
- CPUMetricsAccessor是个抽象类,它定义了lastCPUTimeNs、lastSampleTimeNs属性,其getCPUMetrics方法则通过
cpuCost * 1.0d / ((now - lastSampleTimeNs) * cpuCoreNum) * 100
计算usagePercent;其getCpuTime为抽象方法
SunCpuAccessor
skywalking-6.6.0/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/cpu/SunCpuAccessor.java
public class SunCpuAccessor extends CPUMetricsAccessor { private final OperatingSystemMXBean osMBean; public SunCpuAccessor(int cpuCoreNum) { super(cpuCoreNum); this.osMBean = (OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean(); this.init(); } @Override protected long getCpuTime() { return osMBean.getProcessCpuTime(); } } 复制代码
- SunCpuAccessor继承了CPUMetricsAccessor,它通过ManagementFactory.getOperatingSystemMXBean()的getProcessCpuTime来实现getCpuTime方法
小结
CPUProvider的构造会实例化org.apache.skywalking.apm.agent.core.jvm.cpu.SunCpuAccessor;其getCpuMetric则通过cpuMetricsAccessor.getCPUMetrics()获取CPU信息(usagePercent
)
doc
这篇关于聊聊skywalking的CPUProvider的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享