如何学习Linux性能优化?

news2024/11/15 21:22:14

你是否也曾跟我一样,看了很多书、学了很多Linux性能工具,但在面对Linux性能问题时,还是束手无策?实际上,性能分析和优化始终是大多数软件工程师的一个痛点。但是,面对难题,我们真的就无解了吗?

固然,性能问题的复杂性增加了学习难度,但这并不能成为我们进阶路上的“拦路虎”。在我看来,大多数人对性能问题“投降”,原因可能只有两个。

一个是你没找到有效的方法学原理,一听到“系统”、“底层”这些词就发怵,觉得东西太难,自己一定学不会,自然也就无法深入学下去,从而不能建立起性能的全局观。

再一个就是,你看到性能问题的根源太复杂,既不懂怎么去分析,也不能抽丝剥茧找到瓶颈。

你可能会想,反正程序出了问题,上网查就是了,用别人的方法,囫囵吞枣地多试几次,有可能就解决了。于是,你懒得深究这些方法为啥有效,更不知道为什么,很多方法在别人的环境有效,到你这儿就不行了。

所以,相同的错误重复在犯,相同的状况也是重复出现。

其实,性能问题并没有你想像得那么难,只要你理解了应用程序和系统的少数几个基本原理,再进行大量的实战练习,建立起整体性能的全局观,大多数性能问题的优化就会水到渠成。

我见过很多工程师,在分析应用程序所使用的第三方组件的性能时,并不熟悉这些组件所用的编程语言,却依然可以分析出线上问题的根源,并能通过一些方法进行优化,比如修改应用程序对它们的调用逻辑,或者调整组件的配置选项等。

还是那句话,你不需要了解每个组件的所有实现细节,只要能理解它们最基本的工作原理和协作方式,你也可以做到。

性能指标是什么?

学习性能优化的第一步,一定是了解“性能指标”这个概念。

当看到性能指标时,你会首先想到什么呢?我相信“高并发”和“响应快”一定是最先出现在你脑海里的两个词,而它们也正对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的视角来考察性能,直接影响了产品终端的用户体验。跟它们对应的,是从系统资源的视角出发的指标,比如资源使用率、饱和度等。

我们知道,随着应用负载的增加,系统资源的使用也会升高,甚至达到极限。而性能问题的本质,就是系统资源已经达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求。

性能分析,其实就是找出应用或系统的瓶颈,并设法去避免或者缓解它们,从而更高效地利用系统资源处理更多的请求。这包含了一系列的步骤,比如下面这六个步骤。

  • 选择指标评估应用程序和系统的性能;

  • 为应用程序和系统设置性能目标;

  • 进行性能基准测试;

  • 性能分析定位瓶颈;

  • 优化系统和应用程序;

  • 性能监控和告警。

了解了这些性能相关的基本指标和核心步骤后,该怎么学呢?接下来,我来说说要学好Linux 性能优化的几个重要问题。

学这个专栏需要什么基础

首先你要明白,我们这个专栏的核心是性能的分析和优化,而不是最基本的Linux操作系统的使用方法。

因而,我希望你最好用过Ubuntu或其他Linux操作系统,然后要具备一些编程基础,比如:

  • 了解Linux常用命令的使用方法;

  • 知道怎么安装和管理软件包;

  • 知道怎么通过编程语言开发应用程序等。

这样,在我讲性能时,你就更容易理解性能背后的原理,特别是在结合专栏里的案例实践后,对性能分析能有更直观的体会。

这个专栏不会像教科书那样,详细教你操作系统、算法原理、网络协议乃至各种编程语言的全部细节,但一些重要的系统原理还是必不可少的。我还会用实际案例一步步教你,贯穿从应用程序到操作系统的各个组件。

学习的重点是什么?

想要学习好性能分析和优化,建立整体系统性能的全局观是最核心的话题。因而,

  • 理解最基本的几个系统知识原理;

  • 掌握必要的性能工具;

  • 通过实际的场景演练,贯穿不同的组件。

这三点,就是我们学习的重中之重。我会在专栏的每篇文章中,针对不同场景,把这三个方面给你讲清楚,你也一定要花时间和心思来消化它们。

其实说到性能工具,就不得不提性能领域的大师布伦丹·格雷格(Brendan Gregg)。他不仅是动态追踪工具DTrace的作者,还开发了许许多多的性能工具。我相信你一定见过他所描绘的Linux性能工具图谱:

(图片来自brendangregg.com)

这个图是Linux性能分析最重要的参考资料之一,它告诉你,在Linux不同子系统出现性能问题后,应该用什么样的工具来观测和分析。

比如,当遇到I/O性能问题时,可以参考图片最下方的I/O子系统,使用iostat、iotop、blktrace等工具分析磁盘I/O的瓶颈。你可以把这个图保存下来,在需要的时候参考查询。

另外,我还要特别强调一点,就是性能工具的选用。有句话是这么说的,一个正确的选择胜过千百次的努力。虽然夸张了些,但是选用合适的性能工具,确实可以大大简化整个性能优化过程。在什么场景选用什么样的工具、以及怎么学会选择合适工具,都是我想教给你的东西。

但是切记,千万不要把性能工具当成学习的全部。工具只是解决问题的手段,关键在于你的用法。只有真正理解了它们背后的原理,并且结合具体场景,融会贯通系统的不同组件,你才能真正掌握它们。

最后,为了让你对性能有个全面的认识,我画了一张思维导图,里面涵盖了大部分性能分析和优化都会包含的知识,专栏中也基本都会讲到。你可以保存或者打印下来,每学会一部分就标记出来,记录并把握自己的学习进度。

怎么学更高效?

前面我给你讲了Linux性能优化的学习重点,接下来我再跟你分享一下,我的几个学习技巧。掌握这些技巧,可以让你学得更轻松。

技巧一:虽然系统的原理很重要,但在刚开始一定不要试图抓住所有的实现细节。

深陷到系统实现的内部,可能会让你丢掉学习的重点,而且繁杂的实现逻辑,很可能会打退你学习的积极性。所以,我个人观点是一定要适度。

你可以先学会我给你讲的这些系统工作原理,但不要去深究Linux内核是如何做到的,而是要把你的重点放到如何观察和运用这些原理上,比如:

  • 有哪些指标可以衡量性能?

  • 使用什么样的性能工具来观察指标?

  • 导致这些指标变化的因素等。

技巧二:边学边实践,通过大量的案例演习掌握Linux性能的分析和优化。

只有通过在机器上练习,把我讲的知识和案例自己过一遍,这些东西才能转化成你的。我精心设计这些案例,正是为了让你有更好的学习理解和操作体验。

所以我强烈推荐你去实际运行、分析这些案例,或者用学到的知识去分析你自己的系统,这样你会有更直观的感受,获得更好的学习效果。

技巧三:勤思考,多反思,善总结,多问为什么。

想真正学懂一门知识,最好的方法就是问问题。当你能提出好的问题时,就说明你已经深入了解了它。

你可以随时在留言区给我留言,写下自己的疑问、思考和总结,和我还有其他的学习者一起讨论切磋。你也可以写下自己经历过的性能问题,记录你的分析步骤和优化思路,我们一起互动探讨。

学习之前,你的准备

作为一个包含大量案例实践的课程,我会在每篇文章中,使用一到两台Ubuntu 18.04虚拟机,作为案例运行和分析的环境。如果你只是单纯听音频的讲解,却从不动手实践,学习的效果一定会大打折扣。

所以,你是不是可以准备好一台Linux机器,用于课程案例的实践呢?任意的虚拟机或物理机都可以,并不局限于Ubuntu系统。

思考

今天的内容是我们后续学习的热身准备。从下篇文章开始,我们就要正式进入Linux性能分析和优化了。所以,我想请你来聊一聊,你之前在解决Linux性能问题时,有遇到过什么样的困难或者疑惑吗?或者是之前自己学习Linux性能优化时,有哪些问题吗?参考我今天所讲的内容,你又打算怎么来学这个专栏?

欢迎在留言区和我分享

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

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

相关文章

2.11键盘事件

目录 实验原理 实验代码 实验结果 实验原理 简单、常用的键盘事件是等待按键事件,它由 waitKey 函数来实现。无论是刚开始学习 OpenCV,还是使用 OpenCV 进行开发调试,都可以看到waitKey 函数的身影,然而基础的东西往往容易忽略…

[Java]MyBatis轻松拿下

介绍 在业务开发过程中, 都是使用java程序完成数据库的操作, 目前最主流的技术就是MyBatis MyBatis是一款优秀的 持久层 框架,用于简化JDBC的开发。 官网: https://mybatis.org/mybatis-3/zh/index.htmlmybatis是Apache的一个开源项目iBatis, 2010年迁移到了googl…

Day00_场景题

文章目录 资料项目经历技能清单自我介绍QPS和TPS?如何设计一个排行榜的功能?如何解决大文件上传问题延时任务处理场景如何设计一个秒杀系统?分布式幂等性如何设计?如果你的系统的QPS 突然提升10倍你会怎么设计?如何从零搭建 10 万级QPS 大流量、高并发优惠券系统?高 QPS,…

OpenCV绘图函数(9)填充多边形函数fillPoly()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 填充一个或多个多边形轮廓所包围的区域。 函数 cv::fillPoly 填充由若干个多边形轮廓所包围的区域。该函数可以填充复杂的区域,例如带…

【大模型】GPT系列模型基础

前言:GPT整体上与transformer结构相似,但只用了decoder部分。 目录 1. GPT2. GPT23. GPT34. 知识补充4.1 下游任务实现方式4.2 sparse attention 1. GPT 预训练:无监督,根据前k个词预测下一个词的概率。微调: 有监督&a…

AI嵌入式人工智能开发 --- 【1】初始RKNPU

目录 一、NPU的由来 二、RKNPU介绍 三、RKNPU单核框架 3.1 AHB/AXI 接口 3.2 卷积神经网络加速单元(CNA) 3.3 数据处理单元(Data Processing Unit,DPU) 3.4 平面处理单元(Planar Processing Unit&a…

#驱动开发

内核模块 字符设备驱动 中断、内核定时器 裸机开发和驱动开发的区别? 裸机开发 驱动开发(基于内核) 相同点 都能够控制硬件(本质:操作寄存器) 不同点 用C语言给对应的地址里面写值 按照一定的框架格式…

【DSP+FPGA】基于DSP+FPGA XC7K325T与TMS320C6678的通用信号处理平台

DSP FPGA 协同处理架构板载 1 个TMS320C6678 多核DSP处理节点板载 1 片 XC7K325T FPGA处理节点板载 1 个FMC 接口板载4路SFP光纤接口FPGA 与 DSP 之间采用高速Rapid IO互联 基于FPGA与DSP协同处理架构的通用高性能实时信号处理平台,该平台采用1片TI的KeyStone系列多…

CSS3 文本效果(text-shadow,box-shadow,white-space等)

一 text-shadow text-shadow 属性是 CSS3 中用于为文本添加阴影效果的工具。它可以增强文本的可读性和视觉吸引力,提供丰富的视觉效果 1 语法 text-shadow: offset-x offset-y blur-radius color;offset-x:阴影相对于文本的水平偏移量。可以是正值&am…

c/c++: function和procedure的区别

https://www.cs.nthu.edu.tw/~ychung/slides/CSC4180/Alfred%20V.%20Aho,%20Monica%20S.%20Lam,%20Ravi%20Sethi,%20Jeffrey%20D.%20Ullman-Compilers%20-%20Principles,%20Techniques,%20and%20Tools-Pearson_Addison%20Wesley%20(2006).pdf 函数与过程的区别,一个…

AI语音识别神器Openai Whisper对中文的支持如何?

文章目录 前言一、资料准备二、Whisper环境搭建第一步:安装whisper第二步:安装ffmpeg 三、Whisper测试总结其他相关 前言 语音识别一直以来都是人工智能领域中一个不容忽视的技术,随着大模型时代的到来,这项技术也发生了质的变化…

解决MAC电脑SVN Android studio不能提交.so文件相关

目录 前言 确认问题原因 修改 SVN 配置文件 验证配置是否生效 其他注意事项 总结 前言 在使用 macOS 进行开发时,可能会遇到通过 SVN 在 Android Studio 中无法提交 .so 文件的问题。这通常是由于 SVN 配置文件中的 global-ignores 设置导致的,…

比特币牛市将至背后

作者:Arthur Hayes 编译:Liam 「此处所表达的任何观点均为作者个人意见,不应作为投资决策依据,也不应被视为参与投资交易的推荐或建议。」 我打破常规,前往南半球滑雪两周,为北半球的暑假画上圆满的句号。我…

03. SpringBoot 项目创建

接下来我们将要完成一个基础的 Springboot 项目的创建,并且将项目上传到 Gitee 1. 查看官网,选择版本 学习任何一门技术,一定要学会从官网了解一手信息,无论是哪个博主的博客都是有时效性的,我们要掌握这样的习惯&…

Runtime Asset Database 运行时资产数据库

运行时资产数据库是一个库,旨在简化Unity应用程序中运行时保存和加载子系统的实现。此库复制并扩展了Unity编辑器中常见的预制件、预制件变体和资源的概念,使其在运行时比以往任何时候都更容易管理和操纵游戏资源,并在运行时动态实现与Unity编辑器类似的工作流。 Unity开发人…

晟鑫商会与家盛资本携手合作,共创金融科技新篇章

在数字化浪潮的推动下,金融科技正成为全球经济发展的新引擎。近日,晟鑫商会与家盛资本宣布达成战略合作伙伴关系,旨在通过创新合作,共同开拓市场新机遇,促进双方在数字经济领域的深入发展。两家机构的联合预示着在金融科技领域将开启一段新的旅程。 晟鑫商会,作为互联网商业合作…

做好价格监测这些点要注意

品牌在进行数据监测时,首要关注点在于数据本身的准确率与覆盖率,而在价格监测方面亦是如此。品牌需高度关注电商价格监测系统输出的价格、促销信息、销量等数据。一旦促销信息出现不准确的情况,到手价必然会受到影响,进而对后端治…

USB PHY——ULPI

ULPI协议的全称是UTMI Low Pin Interface。从名字上就可以看出ULPI是UTMI的Low Pin版本。 ULPI是在UTMI的基础上封装了一层。 ULPI需要读写寄存器,而UTMI只需直接拉高或拉低信号线。 从这张图可以看出 ULPI 是在 UTMI level3 再往上一层 外设参考设计

ssm面向企事业单位的项目申报小程序论文源码调试讲解

2 系统实现的技术支持 2.1微信开发者工具 在传统web浏览器中,在加载htm15页面时先加载视图层的html和css,后加载逻辑层的java script,然后返回数据并在浏览器中展示页面。而微信开发者工具的系统层是基于Native System的,视图层和…

COMP9315-week2-lecture1

COMP9315 19T2 Week 2 Lecture 1_哔哩哔哩_bilibili C:\python\COMP9315-master\19T2\Lectures\weel02.pdf COMP9315 24T1 - Course Notes (unsw.edu.au) 前面三分之一时间讲week1的练习题,是一个存储过程 COMP9315-master\19T2\Lecture Exercises\week01\ex05\…