资深工程师教你如何学习Linux性能优化?

15706475-5d591fd0ddcc2846
资深工程师教你如何学习Linux性能优化?

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

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

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

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

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

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

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

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

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

性能指标是什么?

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

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

15706475-8770eae013347ef5
资深工程师教你如何学习Linux性能优化?

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

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

  • 选择指标评估应用程序和系统的性能;
  • 为应用程序和系统设置性能目标;
  • 进行性能基准测试;
  • 性能分析定位瓶颈;
  • 优化系统和应用程序;
  • 性能监控和告警。

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

学这个需要什么基础

我们这个核心是性能的分析和优化,而不是最基本的 Linux 操作系统的使用方法。

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

  • 了解 Linux 常用命令的使用方法;
  • 知道怎么安装和管理软件包;
  • 知道怎么通过编程语言开发应用程序等。

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

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

学习的重点是什么?

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

  • 理解最基本的几个系统知识原理;
  • 掌握必要的性能工具;
  • 通过实际的场景演练,贯穿不同的组件。

这三点,就是我们学习的重中之重。

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

15706475-0fd2c87bf0288dea
资深工程师教你如何学习Linux性能优化?

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

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

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

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

怎么学更高效?

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

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

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

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

  • 有哪些指标可以衡量性能?
  • 使用什么样的性能工具来观察指标?
  • 导致这些指标变化的因素等。

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

只有通过在机器上练习,把讲的知识和案例自己过一遍,这些东西才能转化成你的。

强烈推荐你用学到的知识去分析你自己的系统,这样你会有更直观的感受,获得更好的学习效果。

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

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

15706475-5c4e9f5cebfe46f9
资深工程师教你如何学习Linux性能优化?

【关注作者,了解更多好文,加群733234221领取更多视频教程】

猜你喜欢

转载自blog.csdn.net/weixin_34301132/article/details/86921220