This commit is contained in:
by931
2022-09-06 22:30:37 +08:00
parent 66970f3e38
commit 3d6528675a
796 changed files with 3382 additions and 3382 deletions

View File

@@ -170,23 +170,23 @@ function hide_canvas() {
<p>介绍了指标的作用后,我们来看一下统计指标都有哪些类型,它们又分别有哪些不同的作用?</p>
<h4>计数器Counter</h4>
<p>计数器是一个数值单调递增的指标,一般这个值为 Double 或者 Long 类型。我们比较常见的有 Java 中的 AtomicLong、DoubleAdder它们的值就是单调递增的。QPS 的值也是通过计数器的形式,然后配合上一些函数计算得出的。</p>
<p><img src="assets/CgqCHl8yW_eAKnuGAABkAkOJ2w4716.png" alt="image" /></p>
<p><img src="assets/CgqCHl8yW_eAKnuGAABkAkOJ2w4716.png" alt="png" /></p>
<p>图 1计数器</p>
<h4>仪表盘Gauge</h4>
<p>仪表盘和计数器都可以用来查询某个时间点的固定内容的数值,但和计数器不同,仪表盘的值可以随意变化,可以增加也可以减少。比如在 Java 线程池中活跃的线程数,就可以使用 ThreadPoolExecutor 的 getActiveCount 获取;比较常见的 CPU 使用率和内存占用量也可以通过仪表盘获取。</p>
<p><img src="assets/Ciqc1F8yXACACNtbAAB9D2b9yO0247.png" alt="image" /></p>
<p><img src="assets/Ciqc1F8yXACACNtbAAB9D2b9yO0247.png" alt="png" /></p>
<p>图 2仪表盘</p>
<h4>直方图Histogram</h4>
<p>直方图相对复杂一些,它是将多个数值聚合在一起的数据结构,可以表示数据的分布情况。</p>
<p>如下图,它可以将数据分成多个<strong>Bucket</strong>,每个桶代表一个范围区间(图下横向数),比如第 1 个桶代表 0~10第二个桶就代表 10~15以此类推最后一个桶代表 100 到正无穷。每个桶之间的数字大小可以是不同的,并没有规定要有规律。每个桶和一个数字挂钩(图左纵向数),代表了这个桶的数值。</p>
<p><img src="assets/Ciqc1F8yXAyAAr1_AANyRfEvYDI870.png" alt="2.png" /></p>
<p><img src="assets/Ciqc1F8yXAyAAr1_AANyRfEvYDI870.png" alt="png" /></p>
<p>图 3直方图</p>
<p>以最常见的响应耗时举例,我把响应耗时分为多个桶,比如我认为 0~100 毫秒比较快,就可以把这个范围做一个桶,然后是 100~150 毫秒,以此类推。通过这样的形式,可以直观地看到一个时间段内的请求耗时分布图,这有助于我们理解耗时情况分布。</p>
<h4>摘要Summary</h4>
<p>摘要与直方图类似,同样表示的是一段时间内的数据结果,但是数据反映的内容不太一样。摘要一般用于标识分位值,分位值就是我们常说的 TP90、TP99 等。</p>
<p>假设有 100 个耗时数值,将所有的数值从低到高排列,取第 90% 的位置,这个位置的值就是 TP90 的值,而这个桶的值假设是 80ms那么就代表小于等于90%位置的请求都 ≤80ms。</p>
<p>用文字不太好理解,我们来看下面这张图。这是一张比较典型的分位值图,我们可以看到图中有 6 个桶,分别是 50、75、80、90、95、99而桶的值就是相对应的耗时情况。</p>
<p><img src="assets/Ciqc1F8yXCuAAFmKAADKIjwhWjo693.png" alt="3.png" /></p>
<p><img src="assets/Ciqc1F8yXCuAAFmKAADKIjwhWjo693.png" alt="png" /></p>
<p>图 4分位值图</p>
<p>通过分位值图,我们可以看到最小值和最大值以外的一些数据,这些数据在系统调优的时候也有重要参考价值。</p>
<p>在这里面我需要补充一个知识点,叫作<strong>长尾效应</strong>。长尾效应是指少部分类数据在一个数据模型中占了大多数样本,在数据模型中呈现出长长的尾巴的现象。如图所示,最上面的 TP99 相当于这个图表的尾巴可以看到1% 用户访问的耗时比其他 5 个桶加起来的都要长。这个时候你如果通过指标查看某个接口的平均响应时间,其实意义不大,因为这 1% 的用户访问已经超出了平均响应时间,所以平均响应时间已经无法反映数据的真实情况了。这时用户会出现严重的量级分化,而量化分级也是我们在进行系统调优时需要着重关注的。</p>