Linux 常见性能分析方法论介绍(业务负载画像、下钻分析、USE方法论,检查清单)

写在前面


  • 博文内容为 《BPF Performance Tools》 读书笔记整理
  • 内容涉及常用的性能调优方法论介绍:
  • 业务负载画像
  • 下钻分析
  • USE方法论
  • 检查清单
  • 理解不足小伙伴帮忙指正

不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树


讲到性能分析,可以觉得有点高大上,实际上,性能分析在日常运维场景中很常见,系统故障往往可以是性能问题导致。

性能分析的目标是什么?

一般来说,性能分析的目标是

  • 改进最终用户的体验
  • 降低运行成本

最好能将性能分析的目标进行量化定义;这种量化能够表明是否已经达到性能优化目标,还可以用来定义距离目标还有多少差距。可以测量的指标包括如下几项。

  • 延迟:多久可以完成一次请求或操作,通常以毫秒为单位。
  • 速率:每秒操作或请求的速率
  • 吞吐量:通常指每秒传输的数据量,以比特(bit)或者字节(byte)为单位。
  • 利用率:以百分比形式表示的某资源在一段时间内的繁忙程度
  • 成本:开销/性能的比例。

最终用户眼中的性能,可以通过用户请求从发出到被响应之间所花费的时间来衡量,性能优化的目标就是缩短这个时间。这个等待时间被称为延迟

针对延迟的改进可以通过分析请求时间的组成,将其细分为各个组成部分,例如,

  • CPU上运行代码的时间;
  • 等待某个资源,比如磁盘IO、网络以及锁的时间,等待CPU 调度的时间等。

可以编写一个 BPF工具,直接跟踪应用的总体请求延迟以及各个部分的单独开销不过这样的工具会和具体应用相关,并且由于同时对多个事件进行跟踪会带来显著的运行开销。

在开展性能分析工作时请牢记上述目标使用BPF工具,很容易出现这种情况:生成了大量数据,然后又花费了大量时间来理解这些数据,最后却发现该指标并不重要

首先应该明确工作目标是什么:我们是要降低请求延迟,还是降低运行成本?明确目标后,进一步的分析工作就有了上下文,不至于跑偏。

BPF性能分析工具,不只用于分析特定类型的问题。下表所示的是一个性能分析工作的列表,以及在每项工作中 BPF 性能分析工具可以发挥的作用。

性能分析活动BPF 性能分析工具
原型软件或硬件的性能特征分析测量不同业务负载下的延迟直方图
在开发阶段、集成阶段之前的性能分析解决性能瓶颈点,寻找一般的性能改进点
针对软件的某个版本,在发布前/后进行的非回归测试从多个不同来源记录代码的使用和延迟数据,支持快速定位回归测试问题
基准测试,为软件发布的市场宣传工作提供数据支撑研究性能问题,寻找机会改进基准测试性能
在目标环境下进行的概念验证(Proof-ofconcept)测试生成延迟分布直方图,确保性能满足请求的服务等级协议(SLA)
监控生产环境中运行的软件编写可以 24x7运行的工具,提供新的、之前属于盲区的性能指标
故障排查时的性能分析使用现成的工具或根据需要创建自定义的观测点来解决特定的性能问题

多重性能问题

同时发现多个性能问题,需要识别那个性能问题才是最重要的,通常是那些对延迟或者成本开销影响最大的性能问题。

开展那些工作对性能分析有帮助?(性能分析方法论)

如何处理性能分析工具提取的数据,需要机遇性能分析方法论,方法论是一个可以遵循的过程,指导从哪里开始,中间需要做些什么,从哪里结束。

业务负载画像

业务负载画像的目的是理解实际运行的业务负载。你不需要对最终的性能结果进行分析.

消除不必要的工作”是笔者在性能优化结果中收益最显著的一种,通过研究业务负载的构成就可以找到这样的优化点。开展业务负载画像的推荐步骤如下:

  • 负载是谁产生的(比如,进程ID、用户ID、进程名、IP地址)?
  • 负载为什么会产生(代码路径、调用、火焰图)?
  • 负载的组成是什么(IOPS、吞吐量、负载类型)?
  • 负载怎样随着时间发生变化(比较每个周期的摘要信息)?
vfsstat

在这里插入图片描述

上面的输出显示了这虚拟文件系统 VFS 层面业务负载的细节,并且回答第三个问题,即负载类型和操作的速率,同时还通过周期性的输出信息回答了第四个问题
作为第一个问题的Demo,使用 bpftrace 运行一个单行的程序

bpftrace -e 'kprobe:vfs_read { @[comm] == count(); }'

在这里插入图片描述

输出显示了名称为“Web Content”的进程在上述测量期间执行了1725次 vfs read IO 操作。

第二个问题,可以通过火焰图来分析

在这里插入图片描述
Linux CPU 性能分析工具火焰图(Flame Graphs)认知

下钻分析

下钻分析的工作过程是从一个指标开始,然后将这个指标拆分成多个组成部分,再将最大的组件进一步拆分为更小的组件,不断重复这个过程直到定位出一个或多个根因。

可以用一个类比来帮助解释这个过程。设想一下,如果你收到了一笔数额巨大的信用卡账单。为了分析它,需要登录到银行账户中调阅交易记录。在那里你发现了一笔线上书店的大额交易。然后你又登录到线上书店去看哪些书引发了这笔交易,结果有点意外:你发现不小心将此刻正在读的这本书购买了1000本(多谢!)。这就是下钻分析过程:先找到一个线索,然后拆分以寻找更深一步的线索,如此反复直到问题解决。下钻分析的推荐步骤如下:

  1. 从业务最高层级开始分析。
  2. 检查下一个层级的细节。
  3. 挑出最感兴趣的部分或者线索。
  4. 如果问题还没有解决,跳转至第2步。

下钻分析可能会涉及对工具进行定制,此时bpftrace 比 bcc 更加适合。有一种类型的下钻分析涉及将延迟分解为各个组成部分。想象一下下面的分析过程:

  1. 请求延迟 100ms 毫秒
  2. 有10ms在CPU上运行,90ms消耗在脱离CPU的等待过程。
  3. 在脱离CPU等待的部分中,有89ms阻塞于文件系统上。
  4. 文件系统的部分,有3ms阻塞于锁上,而86ms阻塞于存储设备上。

到此为止,你可能已经得出结论:存储设备是问题所在–这确实是一种答案。但是下钻分析可以使问题的上下文更清晰。设想另一种可能的分析过程:

  1. 一个应用花费了89ms被阻塞在文件系统上。
  2. 文件系统花费了78ms被阻塞在写操作上,11ms被阻塞在读操作上。
  3. 在文件系统写操作中,77ms被阻塞在时间戳的更新上。

此时,可以得出的结论是:文件系统访问时间戳是延迟的根源,它们可以被禁止(通过改变挂载选项)。这个分析结果要比“我们需要更快的磁盘”好得多。

一个下钻分析Demo

USE方法论

通过 USE 方法论来对资源的使用情况进行分析

  1. 使用率
  2. 饱和度
  3. 错误

使用当前方法第一补是 绘制软件或者硬件资源图,然后一次对资源进行上述检查

在这里插入图片描述

这个方法论的优势之一是,它以重要的问题作为开始,而非以某种指标形式的答案作为开始,反过来再去找出为什么它重要。这个方法论同时会帮助发现盲区:从你需要回答的问题开始,而不管是否已有工具能够方便测量。

关于Linux中使用USE(使用率/饱和度/错误)方法分析系统性能

检查清单法

性能分析检查清单可以列出一系列工具和指标,用于对照运行和检查。这些工具和指标可以聚焦于那些唾手可得的性能问题:列出十几个常见的问题,以及对应的分析方法,这样让每个人都能参照检查。这个方法论适用于指导公司各个层次的工程师实施操作,允许你将个人的技能应用于更广的范围内。
下面会给出两个清单,
一个使用了传统(非BPF)工具,比较适合于快速分析(开始的 60 秒);
Linux 60秒快速性能分析操作手册

另一个清单是适合及早使用的 BCC 工具列表。

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知 😃


《BPF Performance Tools》


© 2018-2024 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/504698.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++刷题篇——07检测热点字符

一、题目 二、解题思路 1、使用map&#xff0c;key为元素&#xff0c;value为出现的次数 2、由于sort不适用于map&#xff0c;因此要将map的key、value放到vector中&#xff0c;再对vector排序 3、对map排序&#xff1a;方法1&#xff1a;使用二维数组vector<vector<>…

第十三届蓝桥杯JavaA组省赛真题 - GCD

解题思路&#xff1a; 找规律 最大的最小公因数就是两数的差值 5 7 gcd2 1 3 gcd2 1 4 gcd3 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);long a scan.nextLong();long b scan.ne…

Unity类银河恶魔城学习记录11-10 p112 Items drop源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemObject_Trigger.cs using System.Collections; using System.Collecti…

Django详细教程(一) - 基本操作

文章目录 前言一、安装Django二、创建项目1.终端创建项目2.Pycharm创建项目&#xff08;专业版才可以&#xff09;3.默认文件介绍 三、创建app1.app介绍2.默认文件介绍 四、快速上手1.写一个网页步骤1&#xff1a;注册app 【settings.py】步骤2&#xff1a;编写URL和视图函数对…

练习3-2 计算符号函数的值

对于任一整数n&#xff0c;符号函数sign(n)的定义如下&#xff1a; 请编写程序计算该函数对任一输入整数的值。 输入格式: 输入在一行中给出整数n。 输出格式: 在一行中按照格式“sign(n) 函数值”输出该整数n对应的函数值。 输入样例1: 10 输出样例1: sign(10) 1 输入样例…

文献阅读:通过 NeuronChat 从单细胞转录组推断神经元-神经元通信

文献介绍 「文献题目」 Inferring neuron-neuron communications from single-cell transcriptomics through NeuronChat 「研究团队」 聂青&#xff08;加利福尼亚大学欧文分校&#xff09; 「发表时间」 2023-02-28 「发表期刊」 Nature Communications 「影响因子」 16.6…

React系列之合成事件与事件处理机制

文章目录 React事件处理机制原生事件的事件机制事件代理&#xff08;事件委托&#xff09; 合成事件使用合成事件目的合成事件原生事件区别事件池 原生事件和React事件的执行顺序e.stopPropagation() React17事件机制的修改 React事件处理机制 react 事件机制基本理解&#xf…

数字经济全景解析:数据要素、资源与资产的转化与治理

无极低码 &#xff1a;https://wheart.cn 数字经济全景解析&#xff1a;数据要素、资源与资产的转化与治理—无极低码wheart数字经济全景解析&#xff1a;数据要素、资源与资产的转化与治理https://wheart.cn/so/home?mindex&id67737c2a-ef2f-11ee-8183-525400be6368 为…

【现代企业管理】企业组织结构和组织文化的理论与实践——以华为为例

一、前言 管理是科学和艺术的统一体&#xff0c;它是企业成长的保证。企业管理中&#xff0c;管理者面对的往往不是一个完整的系统&#xff0c;而是各种不具有整体规律性的零碎信息的总和&#xff0c;因此进行信息的整合和研究是管理的重点和关键。 组织管理作为管理的四大职…

RDGCN阅读笔记

Relation-Aware Entity Alignment for Heterogeneous Knowledge Graphs 面向异质知识图谱的关系感知实体对齐 Abstract 实体对齐是从不同的知识图(KGs)中链接具有相同真实世界实体的任务&#xff0c;最近被基于嵌入的方法所主导。这种方法通过学习KG表示来工作&#xff0c;以…

SRS OBS利用RTMP协议实现音视频推拉流;WebRTC 屏幕直播分享工具

一、SRS OBS利用RTMP协议实现音视频推拉流 参考&#xff1a;https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1&#xff09;docker直接运行SRS服务&#xff1a; docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.co…

Netty组件优化之时间轮

关于任务调度有多种方式实现&#xff0c;常见的像Timer,ScheduledThreadPoolExecutor,以及时间轮 Timer原理 timer底层主要是依靠最小堆排序&#xff0c;把任务封装并存储在一个优先级队列中&#xff0c;这个队列底层还是依靠数组和最小堆排序构成。 Timer timer new Timer();…

JavaAgent 技术原理及实战

JavaAgent 技术原理及实战 1、引子2、JavaAgent 简单示例&#xff1a;方法开始和结束时打印日志2.1 创建 Agent2.2 编写验证 agent 功能的测试类2.2.1 使用JavaAgent 静态加载方式2.2.2 使用 JavaAgent 动态加载方式 2.3、小结 3、JavaAgent3.1 JavaAgent是什么&#xff1f;3.2…

使用Detours进行HOOK

文章目录 Detours介绍Detours配置Detours进行Sleep Hook Detours介绍 Detours是微软研究院开发的一款软件工具&#xff0c;用于Windows平台上的应用程序重定向和修改。 它可以在运行时修改应用程序的执行路径&#xff0c;允许开发人员注入自定义代码来改变应用程序的 行为&…

实验2:CLI的使用与IOS基本命令

1、实验目的 通过本实验可以掌握&#xff1a; CLI的各种工作模式个CLI各种编辑命令“?” 和【Tab】键使用方法IOS基本命令网络设备访问限制查看设备的相关信息 2、实验拓扑 CLI的使用与IOS基本命令使用拓扑如下图所示。 3、实验步骤 &#xff08;1&#xff09;CLI模式的切…

docker-compose编排lnmp环境

&#xff08;1&#xff09;创建一个目录lnmpcompose [rootlocalhost ~]# tree lnmpcompose lnmpcompose ├── conf │ └── nginx.conf ├── docker-compose.yml └── html ├── index.html ├── mysql.php └── test.php &#xff08;2&#xff09;在创建的目…

用ENIGMA-toolbox作图

之前一直使用ggseg呈现结果&#xff0c;最近想试一试其他绘图工具。ENIGMA-toolbox有所了解&#xff0c;绘图功能看起来门槛不高&#xff0c;所以就试着用它呈现一些结果。Matlab版本的ENIGMA-toolbox直接使用就是SurfStat的功能绘图&#xff0c;Python版本的绘图功能应该是根据…

Spring Boot页面国际化

GitHub&#xff1a;SpringBootDemo Gitee&#xff1a;SpringBootDemo 微信公众号&#xff1a; 0 开发环境 JDK&#xff1a;1.8Spring Boot&#xff1a;2.7.18 1 检查配置 确保File -> Settings… -> Editor -> File Encodings 配置中编码为UTF-8&#xff0c;否则…

Python | Leetcode Python题解之第2题两数相加

题目&#xff1a; 题解&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optiona…

攻防世界-easyphp

题目信息 题目信息如下&#xff1a; 可以看到&#xff0c;key1和key2的值都为1的时候&#xff0c;才能拿到flag。再网上看&#xff0c;发现key1和key2的值取决于a,b和c的值。 <?php highlight_file(__FILE__); $key1 0; $key2 0;$a $_GET[a]; $b $_GET[b];if(isset($a…