设为首页 - 加入收藏
广告 1000x90
您的当前位置:主页 > 抖音运营 > 引流推广 > 正文

性能分析要写什么内容(性能分析概述)

来源:引流技巧 编辑:引流技巧 时间:2024-11-14

要点

  • 性能分析的目标。

  • 性能优化的常用手段。

概述

性能分析的目标是改进最终用户的体验以及降低运行成本。对于性能分析来说,最好的分析方法是能够将分析目标进行量化,以可视化的形式提供给开发者。

性能分析通常有两个视角:资源分析负载分析。其中,资源分析是从CPU、内存、磁盘、网络等方面进行考察,关注的指标有:IOPS(每秒发生的输入/输出操作的次数)、吞吐量(数据传输速度:字节/秒)、使用率(给定时间内的繁忙程度)和饱和度(某一资源无法满足服务的排队工作量)。负载分析是检查应用程序的性能,分析对象为请求、延时(响应时间)和完成度(错误率),关注的指标有:每秒业务处理量和延时。

著名性能优化大师Brendan Gregg,所以了十多种分析方法论。常用方法有:

业务负载画像

找出实际运行的业务负载进行分析,具体内容:

1、WHO:负载是谁产生的?比如:进程ID、用户ID、进程名、IP地址。

2、WHY:负载为什么会产生?比如:代码路径、调用栈、火焰图。

3、WHAT:负载的组成是什么?比如:IOPS、吞吐量、负载类型。

4、HOW:负载怎么样随着时间发生变化?比如:比较每个周期的摘要信息。

下钻分析

从一个指标出发,然后将这个指标拆分成多个组件,将最大的组件进一步拆分为更小的组件,不断重复这个过程,直到定位出一个或多个原因。具体步骤:

1、从业务最高层级开始分析。

2、检查下一个层级的细节。

3、挑出最感兴趣的部分或者线索。

4、如果问题还没有解决,跳转至第2步。

USE方法

针对每个资源,分别去检查:

1、使用率(utilization):在规定的时间间隔内,资源用于服务工作的时间百分比。

2、饱和度(saturation):资源不能再服务更多额外工作的程度,通常有等待队列。

3、错误(errors):错误事件的个数。

检查清单法

通过列出一系列工具和指标,用于对照运行和检查。

分析工具

性能分析要写什么内容(性能分析概述)性能分析要写什么内容(性能分析概述)

如上图,它列举了系统各资源检测的工具。图中,部分工具是BCC工具集,需要单独安装。

BCC

  • github:https://github.com/iovisor/bcc。

  • CentOS安装

echo-e'[iovisor]\\nbaseurl=https://repo.iovisor.org/yum/nightly/f23/$basearch\\nenabled=1\\ngpgcheck=0'|sudotee/etc/yum.repos.d/iovisor.repo

yuminstall-ybcc-tools

  • 安装测试,在安装目录下,执行:

./cachetop

  • 默认安装路径:/usr/share/bcc/tools。

bpftrace

  • github:https://github.com/iovisor/bpftrace。

  • CentOS安装

curlhttps://repos.baslab.org/rhel/7/bpftools/bpftools.repo–output/etc/yum.repos.d/bpftools.repo

yuminstallbpftracebpftrace-toolsbpftrace-docbcc-staticbcc-tools

  • 安装测试

bpftrace-e'tracepoint:syscalls:sys_enter_open{printf("%s%s\\n",comm,str(args->filename));}'

  • 默认安装路径:/usr/share/bpftrace/tools。

CPU

CPU的性能优化手段:

  • 合理使用锁:spin-lock,能减少cpu切换,在锁的粒度较小时较合适。读写锁适用于,读多写少场景。对于大块内存的锁,可以考虑把内存块进行hash,每hash的内存块单独持有自己的锁,减少锁的粒度。

  • 合理设置工作线程数:如:N核服务器,通过执行业务的单线程分析出本地计算时间为x,等待时间为y,则工作线程数(线程池线程数)设置为 N*(x+y)/x,能让CPU的利用率最大化。

  • 指令优化:使用SSE等指令集提高并行计算速度,需要注意的是,使用SSE优化时,需要进行内存对齐。

  • 绑定cpu:减少上下文切换,提高cache的命中率。

  • 考虑分支预测及局部性原理。

内存

内存的性能优化手段:

  • 使用高效的内存管理组件,减少内存频繁申请,如tcmalloc、jemalloc等。

  • 利用线程局部变量(Thread Local),线程内部使用不需要加锁。

  • 读多写少的内存块,可以考虑使用双buffer管理,减少数据更新时锁的竞争。

  • 位图、布隆过滤器可以提高查找性能。

  • 对内存进行hash分片,来提高查找速度,如果一次hash不行,就再进行一次hash。

  • 可以考虑实现无锁数据结构。

IO

IO的性能优化手段:

  • 尽量不读写磁盘:将数据尽可能地加载到内存。

  • 尽量少读写磁盘:在进行磁盘写操作前,进行数据压缩。

  • 尽量顺序读写磁盘:磁盘的顺序读写速度要优于随机读写。

在无法避免磁盘操作时,可以考虑使用异步写、合并写操作、定时刷盘、zero-copy等技术,从而降低IO延时。需要注意的是,逻辑IO和物理IO可能是不对称的,因此,需要分开进行考查。

网络

网络的性能优化手段:

  • 合理使用长连接,减少连接的频繁创建。

  • 传输数据进行压缩,可以减少带宽,但需要评估压缩和解压带来的cpu消耗。

  • 选择合理的通讯协议,HTTP or RPC。

  • 支持多路复用。

  • 使用事件模型。

  • 某些业务场景下,可以考虑使用UDP协议。

所以

性能优化工作,一方面,需要有足够的耐心,通过各种工具或者手段,找出性能瓶颈;另一方面,对整个业务流程也需要足够熟悉。

对于应用程序,影响性能的因子可能有很多,但并不是每一个指标都可以优化到极致,更多的是需要找到一个平衡点。比如,我们需要优化IO性能,最直接的做法,是将数据全部加载至内存,但是这样,必然会导致内存成本的上升。所以,我们可能会考虑只加载热点数据至内存。

性能优化时,需要以系统整体性能为目标,去进行优化。对于一个庞大的业务系统来说,可能会涉及到很多的处理流程,可能会依赖很多的子系统。这些流程中,某个业务流程是否已经弃用,是否可以并行处理,是否可以合并请求,是否可以预加载,是否可以解耦,是否可以离线处理等等,都可以作为性能优化的点来考虑。因此,从系统整体性能去进行优化,其收益往往会远大于某个具体应用程序的优化。

另外,性能优化是一个长期的多变的过程。一次性能优化,可能在软硬件升级、业务规模变化之后,引出新的性能瓶颈。也可能在不同的环境下,性能优化后的效果并不一定相同。

在性能分析中,有三个重要的概念:

已知的已知:你知道你需要查看哪些指标,并且知道怎么获得这些指标。

已知的未知:你知道你需要查看哪些指标,但是你不知道怎么去获得这些指标。

未知的未知:你不知道需要查看哪些指标。

所以,性能分析工作,就是你知道的越多,不知道的也会越多。其他知识系统,想必也是这个道理吧。

微商引流技巧网 www.yinliujiqiao.com 联系QQ:1716014443 邮箱:1716014443@qq.com

Copyright © 2019-2024 强大传媒 网站地图 rss地图

Top