gopher梦工厂

其他

Go运行时metric指标详解

一个运行中的程序似乎很难具有“内省”能力,我们需要通过一个外部的观察者例如dlv、gdb来观察,或者是程序自身暴露的metric。这就好像是要查看人体胃部的状况,需要借助外部工具胃镜,而内部的病变或者疼痛这样的指标也可以通过外部反应出来一样。这种metric暴露当然都是需要成本的。对于Go程序来讲,大点的公司都有自己的监控平台,观测机器级别的(例如内存、CPU、网络、磁盘容量)、容器级别的(cgroup,cpu抢占、cpu.throttled)、程序级别的(qps、请求延迟)等等。虽然大部分指标都是某一时刻瞬时的指标,但是通过指定时间内拉取指标,观察指标的变化,我们就可以观察到程序在一段时间内运行状况。在本文中笔者将介绍运行时暴露出来的一些指标,主要是内存方面的。其他CPU等指标可以通过pprof等其他手段获取到。这些指标对于观察程序的异常情况、并排查问题有重要意义。对一些指标的深刻理解需要对于Go运行时处理模型的理解,因此并不是一件简单的事情。本文希望提供对这些指标的准确表述,较少其他同学理解的成本。要注意的是,我们可能有多种工具来观测相同的指标,例如pprof、trace
2022年3月9日