使用 USE 法快速定位服务器资源瓶颈
Nov 7, 2020 22:30 · 1830 words · 4 minute read
USE(Utilization Saturation and Errors)法可用于分析任何系统的性能,可用于快速定位服务器的资源瓶颈或错误。
介绍
当服务器出现严重的性能问题时,你首先会检查啥?
从何处下手是最难的。我推荐使用 USE 法则来快速解决常见的性能问题,不漏掉关键信息,就像飞行手册的应急检查表那样简单直接快速。USE 法已经在不同的生产还有云计算环境中被无数次被使用成功。它基于三种计量类型,投入 5% 的精力解决 80% 的服务器问题。
USE 法可以被归纳为:检查每个资源的使用率、饱和度和错误数。要在排查性能问题的早期使用,旨在定位系统瓶颈。
- 资源:字面意义上的服务器物理资源(CPU、内存、磁盘等)
- 使用率:资源投入服务的平均时长
- 饱和度:资源的繁忙程度、队列长度或资源已被使用的比例,比如 CPU 的平均运行队列长度为 4
- 错误数:错误事件的数量
低使用率 == 不饱和?
突发的高使用率可能会导致资源饱和与性能问题,即使在很长一段时间内的平均使用率都很低。举个栗子,CPU 饱和度有问题,尽管监控工具显示 CPU 使用率从未超过 80%,而这只是时长 5 分钟的平均数,在这期间有几秒钟 CPU 使用率达到 100%。
资源清单
以下是通用的服务器资源清单:
- CPU:核心、硬件线程
- 内存:容量
- 网卡
- 存储设备:I/O、容量
有些东西就忽略了,像硬件缓存(MMU TLB/TSB,CPU)。对于在高利用率或饱和度状态下出现性能问题导致瓶颈的情况,USE 法最为有效,缓存是锦上添花。缓存命中率和其他性能指标可以在 USE 法之后检查。如果你不确定要不要把某种资源算进来,那就先包含进来再说。
计量
利用率、饱和度和错误数
资源 | 类型 | 计量 |
---|---|---|
CPU | 使用率 | 单核和系统层面的平均值都要看 |
CPU | 饱和度 | 运行队列长度和调度延迟 |
CPU | 错误数 | CPU 缓存 ECC 事件或 CPU 故障(需要操作系统和硬件支持) |
内存 | 使用率 | 系统层面的可用内存 |
内存 | 饱和度 | 匿名分页或线程交换 |
内存 | 错误数 | malloc() 错误(尽管这通常由虚拟内存耗尽导致,而不是物理内存) |
网卡 | 使用率 | 收发吞吐量和最大带宽 |
网络 | 饱和度 | 丢包、溢出 |
存储设备 I/O | 使用率 | 设备繁忙程度 |
存储设备 I/O | 饱和度 | 等待队列长度 |
存储设备 I/O | 错误数 | 设备(软/硬件)错误事件 |
有些难以测量的就不列出来了,幸运的是易于计量的指标(CPU 饱和度、内存使用率、网卡使用率和磁盘使用率)能够覆盖大多数常见的问题
如何获取这些指标请自行 Google 或者查看我的博客。
实际上要读尽每一种指标耗时耗力。USE 法能够让你意识到是否有项目遗漏,一套组合拳下来也大概心里有数了,后面可以进行更彻底的分析。
软件资源
通常适用于构成软件的组件而不是整个应用程序:
- 互斥锁:使用率可定义为锁被持有的时间;饱和度是排队等锁的线程数量
- 线程池:使用率可定义为线程处理任务的时间;饱和度是等待线程池调度的请求数
- 进程/线程数量:系统(线程池)可能会限制进程/线程的数量,当前使用率就是使用率;饱和度就是等待分配;错误数是分配失败的情况
- 文件描述符数量:同上,只不过是文件描述符
解读
有了计量指标,下一步就是解读它们。有些明显有些则不然,可能取决于工作负载需求或期望。
- 使用率:百分百的使用率通常代表瓶颈(检查饱和度来确认);高使用率(超过 70%)可能是问题出现的先兆:
- 如果测算使用率的时间段比较长,70% 的平均使用率可能掩盖掉某次 100% 的突发状况。
- 有些系统资源(比如硬盘)在操作时是不可以中断的,即使是高优先级的任务。当它们的使用率超过 70%,排队等待也就越频繁。而 CPU 在任何时间都可以被中断(抢占)。
- 饱和度:一般就用等待队列的长度或在队列中等待的时长来衡量,和现实生活差不多,排队没好事。
- 错误数:只要不是 0 就值得一看,不断增长的话就更要看了。
反过来说,我们搭建的系统要尽量做到不那么高的使用率、低饱和度和 0 错误。
云计算
在云计算环境中,一般会对租户限制。hypervisor 或者 cgroup 来限制 CPU、内存、网络和存储。每一种都可以使用 USE 法检查,和物理机差不多。
策略
USE 法流程图如下所示:
USE 法确实可以定位貌似系统瓶颈的问题,但是。。。系统可能存在不止一个问题,你发现的那个可能并不是关键问题。每一个扫到的雷都可以进一步排查和排除,然后根据实际情况使用 USE 方法来排查更多的资源,在完成这些工作后权衡到底是调整负载还是资源(加钱)。
结论
USE 法是一种简单的策略,可以用它来对系统的健康状况进行全面检查,找出常见的瓶颈和错误。一般在早期排查中使用,快速定位问题,如有必要,要用其他方法深入研究。它的优势在于速度和可视化:地毯式检查所有资源,不太有所忽略。然而它的应用面有点窄,只能找到某些类型的问题(瓶颈和错误),相当于前菜。