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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二维码门楼牌管理应用平台建设:构建智慧社区新生态

文章目录 前言一、二维码门楼牌管理应用平台概述二、公益报名功能的实现方式三、二维码门楼牌管理应用平台在智慧社区建设中的作用四、结论与展望 前言 随着科技的快速发展,智慧城市建设已成为现代城市管理的重要方向。二维码门楼牌管理应用平台作为智慧社区建设的…

从零打造一款基于Nextjs+antd5.0的中后台管理系统

hi, 大家好,我是徐小夕,最近在研究nextjs, 为了更全面复盘总结nextjs, 我写了一个开箱即用的基于 next 的后台管理系统, 供大家学习参考. github地址:https://github.com/MrXujiang/next-admin 演示地址:http://next-a…

java AIO为什么用的并不多

Java AIO的本质是什么 原文:https://blog.csdn.net/hellojackjiang2011/article/details/131322757?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-131322757-blog-103915337.235%5Ev43%5Epc_blo…

python实验2

一、实验目的 掌握不同文件类型的读写掌握目录遍历的方法掌握json解析器的设计与实现 二、实验内容读取文件内容素数写入文件输出文件目录读写json文件实现json解析器 三、实验环境 在Educoder平台进行实验 四、实验要求 根据每个实训的每个关卡要求完成代码提交和测评 五、 实…

物联网实战--入门篇之(五)嵌入式-IIC驱动(SHT30温湿度)

目录 一、IIC简介 二、IIC驱动解析 三、SHT30驱动 四、总结 一、IIC简介 不管是IIC还是串口,亦或SPI,它们的本质区别在于有各自的规则,就是时序图;它们的相同点就是只要你理解了时序图,你就可以用最普通的IO引脚模…

RAG:检索增强生成系统如何工作

随着大型语言模型(LLM)的发展,人工智能世界取得了巨大的飞跃。经过大量数据的训练,LLM可以发现语言模式和关系,使人工智能工具能够生成更准确、与上下文相关的响应。 但LLM也给人工智能工程师带来了新的挑战&#xff…

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

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

Chrome浏览器隐藏的截图功能配置及使用

来自实用又方便,轻松打开Chrome浏览器隐藏的截图功能!​​​​​​​ 一、通过谷歌Chrome浏览器 现在直接通过谷歌Chrome浏览器内置功能,免安装扩充插件也可以实现Chrome的截图和长截图功能了! 也不需要额外安装任何截图工具 &a…

蓝桥杯习题

https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A,请你先从小到大输出它的每个元素,再从大到小输出他的每个元素。 输入描述: 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an,表…

Leaflet使用多面(MultiPolygon)进行遥感影像掩膜报错解决之道

目录 前言 一、问题初诊断 1、山重水复 2、柳暗花明 3、庖丁解牛 4、问题定位 二、解决多面掩膜问题 1、尝试数据修复 2、实际修复 3、最终效果 三、总结 前言 之前一篇讲解遥感影像掩膜实现:基于SpringBoot和Leaflet的行政区划地图掩膜效果实战&#xff0…

指针强化练习(详解)

更多学习内容 结构体内存对齐 和 位段-CSDN博客指针初级(基础知识)-CSDN博客指针进阶(深入理解)-CSDN博客 目录 1.sizeof与strlen的区别 2.一维数组 3.字符指针 4.二维数组 5.指针运算(笔试题) 6.函数指针 1.sizeof与strlen的区别 请思考以下运行结…

安装即启动?探索流氓App的自启动“黑科技” (Android系统内鬼之ContentProvider篇)

前段时间发现了一个神奇的app,它居然可以在安装之后立即自启动: 看到没有,在提示安装成功大概1到2秒后,就直接弹出Toast和通知了! 好神奇啊,在没有第三方app帮忙唤醒的前提下,它是怎么做到首次安…

C++2D原创我的世界1.00.3版本上市!!!

我很郁闷,为什么就是整不了昼夜交替啊喂!!!!!!!! 虽然这看上去很简单,但做起来要我命!!! 优化过后总共1312行&#xff0c…

DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧

遍历是指通过或遍历节点树 遍历节点树 通常&#xff0c;您想要循环一个 XML 文档&#xff0c;例如&#xff1a;当您想要提取每个元素的值时。 这被称为"遍历节点树"。 下面的示例循环遍历所有 <book> 的子节点&#xff0c;并显示它们的名称和值&#xff1a;…

Qt主窗口 之:停靠/悬浮窗口(QDockWidget)

一、QDockWidget概述 QDockWidget 是 Qt 中的一个窗口部件&#xff0c;用于创建可停靠的窗口&#xff0c;通常用于构建多文档接口&#xff08;MDI&#xff09;或可定制的用户界面。QDockWidget 允许用户将窗口停靠在应用程序的主窗口周围&#xff0c;或将其拖动到独立的浮动窗…

门控循环单元(GRU)

概述 门控循环单元&#xff08;Gated Recurrent Unit, GRU&#xff09;由Junyoung Chung等人于2014年提出&#xff0c;原论文为《Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》。GRU是循环神经网络&#xff08;Recurrent Neural Network, …

实现富文本的三部曲

1、引入 ueditor.config.js ueditor.all.min.js lang/zh-cn/zh-cn.js 2、编辑器显示处 id"content" <textarea id"content" name"content"></textarea> 3、底部 <script type"text/javascript"> //实例化编辑器 …

2024.3.30学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p295-p314 super关键字 super代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器 super细节和语法 访问父类的属性&#xff0c;但不能访问父类的private属性 super.属性名 访问父类的…

回溯算法|39.组合总和

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum > target) {return;}if (sum target) {result.push_back…

Flutter(踩坑)之Android sdkmanager tool not found

D:\Flutter\flutter\bin\flutter.bat doctor --verbose [√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.22631.3296], locale zh-CN)• Flutter version 1.2.1 at D:\Flutter\flutter• Framework revision 8661d8aecd (5 years ago), 2019-02-14 …