01 | 如何学习Linux性能优化?
学习Linux性能优化的“拦路虎”
-
没找到有效的方法学原理
重要的是需要深入学下去,建立起性能的全局观
-
性能问题的根源太复杂,即不懂怎么去分析,也不能抽丝剥茧找到瓶颈
解决“拦路虎”的方法
只要理解应用程序和系统的少数几个基本原理,再进行大量的实战练习,建立起整体性能的全局观。
那么大多数性能问题的优化就会水到渠成。
不需要了解每个组件的所有实现细节,只要能理解它们最基本的工作原理和协作方式。
性能指标是什么?
-
性能指标:
高并发
☞ 对应的性能优化核心指标吞吐
-
性能指标:
响应快
☞ 对应的性能优化核心指标延时
这两个指标是从应用负载的视角来考察性能,直接影响了产品终端的用户体验。
和它们对应的,是从系统资源的视角出发的指标,比如 资源使用率
、饱和度
等。
性能问题的本质
系统资源已经达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求。
性能分析,其实就是找出应用或系统的瓶颈,并设法去避免或者缓解它们。从而更高效地利用系统资源处理更多的请求。这包含一系列的步骤,比如下面这六个步骤。
- 选择指标评估应用程序和系统的性能
- 为应用程序和系统设置性能目标
- 进行性能基准测试
- 性能分析定位瓶颈
- 优化系统和应用程序
- 性能监控和告警
学习的重点
建立整体系统性能的全局观
包括:
- 理解最基本的杰哥系统知识原理
- 掌握必要的性能工具
- 通过实际的场景演练,贯穿不同的组件
性能领域的大师布伦丹·格雷格(Brendan Gregg)动态追踪工具 DTrace 的作者,下图是他所描绘的Linux性能工具图谱:
这个图是Linux性能分析最重要的参考资料之一。它描述了在Linux不同子系统出现性能问题后,应该用什么样的工具来观测和分析。
比如,当遇到 I/O 性能问题时,可以参考图片最下方的 I/O 子系统,使用 iostat、iotop、blktrace 等工具分析磁盘 I/O 的瓶颈。你可以把这个图保存下来,在需要的时候参考查询。
性能工具的选用 ☞ 一个正确的选择胜过千百次的努力。
千万不要把性能工具当成学习的全部 ☞ 工具只是解决问题的手段,关键在于你的用法。只有真正理解了它们背后的原理,并且结合具体场景,融会贯通系统的不同组件,你才能真正掌握它们。
性能的思维导图,里面涵盖了大部分性能分析和优化都会包含的知识。
学习技巧
技巧一:虽然系统的原理很重要,但在刚开始一定不要试图抓住所有的实现细节。
先学会系统工作原理,但不要去深究 Linux 内核是如何做到的,而是要把你的重点放到如何观察和运用这些原理上,比如:
- 有哪些指标可以衡量性能?
- 使用什么样的性能工具来观察指标?
- 导致这些指标变化的因素等。
技巧二:边学边实践,通过大量的案例演习掌握 Linux 性能的分析和优化。
技巧三:勤思考,多反思,善总结,多问为什么。
想真正学懂一门知识,最好的方法就是问问题。当你能提出好的问题时,就说明你已经深入了解了它。
学前准备
使用一到两台 Ubuntu 18.04 虚拟机,作为案例运行和分析的环境。只有通过在机器上练习,把学习的知识和案例自己过一遍,这些东西才能转化成自己的。