目录
第二章 方法
面对一个性能不佳且复杂的系统环境时,首先需要知道的挑战就是从什么地方开始分析、收集什么样的数据,以及如何分析这些数据。
2.1术语
- IOPS:每秒发生的输入/输出操作的次数,是数据传输的一个度量方法。对于磁盘的读写,IOPS指的是每秒读和写的次数。
- 吞吐量:评价工作执行的速率,尤其是在数据传输方面,用于描述数据传输速度
- 响应时间:一次操作完成的时间。包括用于等待和服务的时间,也包括用来返回结果的时间
- 延时:描述操作里用来等待服务的时间
- 使用率:对于服务所请求的资源,使用率描述在所给定的时间区间内资源的繁忙程度。对于存储资源来说,使用率指的就是所消耗的存储容量
- 饱和度:指的是某一资源无法满足服务的排队工作量
- 瓶颈:在系统性能里,瓶颈指的是限制系统性能的那个资源
- 工作负载:系统的输入或者是对系统所施加的负载;对数据库来说,工作负载就是客户端发出的数据库请求和命令。
- 缓存:用于复制或者缓冲一定量数据的高速存储区域,目的是为了避免对较慢的存储层级的直接访问,从而提高性能。
2.2模型
- 受测系统:扰动是会影响结果的,扰动包括定时执行的系统活动、系统的其他用户以及其他的工作负载。
- 排队系统:某些组件和资源可以模型化成排队系统
2.3概念
- 延时:操作执行之前所花的等待时间;如网络的载入时间由三个从不同点测得的不同时间组成:DNS延时、TPS连接延时和TCP数据传输时间。
- 时间量级
- 权衡三角
- 调整的影响:性能调整发生在越靠近工作执行的地方效果最显著
- 合适的层级:不同的公司和环境对于性能有着不同的需求。
- 性能建议的时间点:环境的性能特性会随着时间改变,更多的用户、新的硬件、升级的软件或固件都是变化的因素。
- 负载VS架构:应用程序性能差可能是因为软件配置和硬件问题,也就是架构问题;还可能是由于有太多负载,导致了排队和长延时
- 扩展性:负载增加下的系统所展现的性能称为扩展性
- 已知的未知
已知的已知:有些东西你知道,你知道应该检查性能指标,也知道当前值。如知道应该检查CPU使用率,也知道当前值是10%。
已知的未知:有些东西你知道你不知道,你知道你可以检查一个指标或者判断一个子系统是否存在,但是你还没去做。如你知道你能用profiling检查是什么致使CPU忙碌,但你还没去做这件事
未知的未知:有些东西你不知道你不知道。如你可能不知道设备中断可以消耗大量CPU资源,因此你对此并不做检查 - 指标:性能指标不是免费的,在某些时候,会消耗一些CPU周期来收集和保存指标信息。这就是开销,对目标的性能会有负面影响
- 使用率:经常用于描述设备的使用情况,如CPU何磁盘设备。使用率是基于时间的或者基于容量的。
- 饱和度:随着工作量增加而对资源的请求超过资源所能处理的程度叫做饱和度。饱和度发生在100%使用率时(基于容量),这时多出的工作无法处理,开始排队。如图的饱和度在超过基于容量的使用率100%的标记后线性增长,因为时间花在了延时上,所以任何程度的饱和度问题都是性能问题。对于基于时间的使用率(忙碌百分比),排队和饱和度可能不发生在100%使用时,这取决于资源处理任务的并行能力。
- 剖析:指对目标对象绘图以用于研究和理解
- 缓存:缓存被频繁使用来提高性能。是将较慢的存储层的结果存放在较快的存储层中。
2.4视角
性能分析有两个常用的视角,每个视角的受众、指标以及方法都不一样。这两个视角是工作负载分析和资源分析,可以分别对应理解为对系统软件占自上而下和自底向上的分析。
- 资源分析:以对系统资源的分析为起点,涉及的系统资源有:CPU、内存、磁盘、网卡、总线以及之间的互联。适合资源分析的指标:IOPS、吞吐量、使用率、饱和度
- 工作负载分析:工作负载分析检查应用程序的性能:所施加的工作负载和应用程序是如何响应的。工作负载分析的对象如下:请求、延时、完成度。
2.5方法
- 街灯讹方法:性能调整可以用一种试错的方式反复摸索,对所知道的可调参数进行设置,熟悉各种不同的值,看看是否有帮助
- 随记变动讹方法:这个是一个实验性质的讹方法。用户随记猜测问题可能存在的位置,然后做改动,直到问题消失。为了判断性能是否已经提升,或者作为每次变动结果的判断,用户会选择一项指标进行研究,诸如应用程序运行时间、延时、操作率或者吞吐量
- 责怪他人讹方法:找到一个不是你负责的系统或环境的组件;假设问题是与哪个组件相关的;把问题扔给负责哪个组件的团队;如果证明错了,返回第一步。
- Ad Hoc核对清单法:Ad Hoc核对清单能有效保证所有人多指导如何检查最糟糕的问题
- 问题陈述法:是什么让你认为存在性能问题?系统之前运行得好吗?最近有什么改动?软件?硬件?负载?问题能用延时或运行时间来表述吗?
- 科学法:问题、假设、预测、试验、分析
- 诊断循环:假设---仪器检验---数据---假设
- 工具法:这个视角的核对清单告诉你哪些工具能用、哪些指标能读,以及怎样阐释这些指标。
- USE方法:用来识别系统瓶颈;对于所有的资源,查看它的使用率、饱和度和错误
- 工作负载特征归纳:工作负载归纳是辨别这样一类问题简单而又高效的方法
负载是谁产生的?进程ID、用户ID、远端的IP地址?
负载为什么会被调用?代码路径、堆栈跟踪?
负载的特征是什么?IOPS、吞吐量、方向类型(读取/写入)?包含变动(标准方案)
负载是怎样随着时间变化的?有日常模式吗? - 向下挖掘分析:深度分析开始于高级别检查问题,然后依据之前的发现缩小关注的范围,忽视那些无关的部分,更深入发掘那些相关的部分。
- 延时分析:延时分析检查完成一项操作所用的时间,然后再把时间再分成小的时间段,接着对有着最大延时的时间段做再次的划分,最后定位并量化问题的根本原因。与深度分析相同,延时分析也会深入到软件栈的各层来找到延时问题的原因。
- R方法:R方法是针对Oracle数据库开发的性能分析方法,意在找到延时根源。
- 事件跟踪:系统的操作就是处理离散的事件,包括CPU指令、磁盘I/O,以及磁盘命令、网络包、系统调用、函数库调用、应用程序事件、数据库查询等等。
- 基础线统计:把当前的性能指标与之前的数值做比较,对分析问题常常有启发作用。负载和资源使用的变化是可见的,可以把问题回溯到它们刚发生的时候
- 静态性能调整处理的是架构配置的问题。其他的方法着重的是负载施加后的性能:动态性能
- 缓存调优:从应用程序到磁盘,应用程序会部署多层的缓存来提高I/O的性能。缓存的整体调优策略:
1.缓存的大小尽量和栈的高度一样,靠近工作执行的地方,减少命中缓存的资源开销
2.确认缓存开启并确实在工作。
3.确认缓存的命中/失效比例和失败率
4.如果缓存的大小是动态的,确认它的当前尺寸
5.针对工作负载调整缓存。这项工作依赖缓存的可调参数。
6.针对缓存调整工作负载。这项工作包括减少对华黁不必要的消耗,这样可以释放更多空间来给目标工作负载使用。 - 微基准测试:基准测试测量的是施加了简单的人造工作负载的性能
2.6建模
建立系统的分析模型有很多用途,特别是对于可扩展性分析:研究当负载或者资源扩展时性能会如何变化。这里的资源可以是硬件,如CPU核,也可以是软件,如进程或者线程
- 企业云vs.云:利用云计算技术,任意规模的环境都可以短期租用---用于基准测试。不用建立模型来预测性能,工作负载可以在不同尺寸的云上进行特征归纳、仿真和测试。
- 可视化识别:当通过实验收集到了足够多的数据结果,就可以把他们绘制成性能随规模变化的曲线,这样的曲线往往可以揭示一定的规律。
- Amdahl扩展定律:该定律对系统的扩展性进行了建模,所考虑的是串行构成的不能并行执行的工作负载。这个定律可以用于CPU、线程、工作负载等更多事物的扩展性研究
- 通用扩展定律:用于描述一致性扩展的曲线,竞争的影响也包含在内
- 排队理论:用数学方法研究带有队列的系统,提供了对队列长度、等待时间(延时)、和使用率(基于时间)的分析方法。
2.7容量规划
容量规划可以检查系统处理负载的情况,以及系统如何随着负载的增加而扩展。做容量规划有很多方法,包括研究资源极限和因素分析。
- 资源极限:该方法是指研究在负载之下会成为系统瓶颈的资源,步骤如下:
1.测量服务器请求的频率,并监视请求频率随时间的变化
2.测量硬件和软件的使用。监视使用率随时间的变化
3.用资源的使用来表示服务器的请求情况
4.根据每个资源来推断服务器请求的极限(或用实验确定) - 因素分析:在购买和部署新系统时,通常由很多因素需要调整以达到理想的性能。这些调整包括磁盘和CPU数目、RAM的大小、是否采用闪存设备、RAID的配置、文件系统设置,以及诸如此类的事情。对所有可能的组合做测试,可以决定哪个组合具有最佳的性价比,但是测试次数太多,解决方法是测试一个组合的有限集合
- 扩展方案:要满足更高的性能需要,需要建立更大的系统---垂直扩展;把负载分散给许许多多的系统,在这些系统前面放置负载均衡器,让系统看起来像是一个,水平扩展。
2.8统计
- 量化性能:要比较问题和对于问题排优先级,需要对问题和问题修复后所带来的性能的潜在提升做量化。这件事一般用观测或者实验的方式做。
- 平均值:用单个数据代表一组数据,数据集中趋势的指标
- 标准方差、百分位数、中位数
- 变异系数
- 多重模态分布
- 异常值
2.9监视
- 基于时间的规律
- 性能监测产品
- 启动以来的信息统计
2.10可视化
- 线图
- 散点图:显示所有数据,揭示异常值的存在
- 热图
- 表面图:三维的展示,呈现一个三维的平面。当三维值从一个点到另一个点不会频繁剧烈变动的时候,表面图效果最好,表面会有起伏的山丘。
- 可视化工具
以上内容参考书籍《性能之巅—洞悉系统、企业与云计算》