实际上,性能优化一直都是大多数软件工程师头上的紧箍咒,甚至许多工作多年的资深工程师,有时也无法准确地分析出线上的很多性能问题。
性能分析问题为什么这么难呢?性能优化是个系统工具,常常牵一发而动全身。它涉及了从程序设计、算法分析、编程语言,再到系统、存储、网络等各种底层基础设施的方方面面。每一个组件都可能出现问题,甚至多个组件同时出现问题。毫无疑问,性能优化是软件系统中最有挑战的工作指引,也是最考验体现你综合能力的工作之一。该篇blog记录总结了倪朋飞老师在极客时间开设的《Linux性能优化实战》课程笔记。
开篇词
对于我们大多数人来说,最好的学习方式之一就是带着问题学习。这种方法远比抱着大厚本原理书籍高效,且保证不会轻易把自己积累下来的信心打垮。学习更要学会抓住重点。其实只要了解了少数几个系统组件的基本原理和协作方式,掌握基本的性能指标和工具,学会实际工作中性能优化的常用技巧,就可以准确分析和优化大多数的性能问题了。在此基础之上,再去阅读哪些经典的操作系统或者图书,更能事半功倍。
在这个专栏里面,作者以案例驱动的思路,分别讲解了Linux性能的基本指标、工具、以及相应的观测、分析和调优方法。具体来看分为5个模块。包括CPU性能、磁盘IO性能、内存性能以及网络性能。每个模块还浅入深出分为4个不同的篇章。
基础篇, 介绍Linux必备的基本原理以及对应的性能指标和性能工具。比如理解平均负载,怎么理解上下文切换,Linux内存的工作原理。
案例篇, 通过模拟案例,帮助分析高手在遇到资源瓶颈时,是如何观测、定位、分析并优化这些性能问题的。
套路篇, 理解了基础,亲身体验了模拟案例,梳理出排查问题的整体思路,也就是检查性能问题的一般步骤。
答疑篇, 系统解答出现频次较多的问题。
如何入门学习Linux性能优化
性能指标的概念
其实,性能问题并没有我们想象中的那么复杂。也不需要我们了解每个组件的所有实现细节。
当看到性能指标是,首先会想到的就是“高并发”和“响应快”。它们正对应着性能优化的两个核心目标“吞吐”和“延时”,这两个指标是从应用负载的视角来考察性能,直接影响了产品终端的用户体验。跟它们对应的,是从系统资源的视角出发的指标,比如资源利用率和饱和度等。
随着应用负载的增加,系统资源的使用率也会升高,甚至到达极限。而性能问题的本质就是资源以及达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求。性能分析,其实就是找出应用和系统的瓶颈,并设法去避免或者缓解它们。从而更高效的利用资源处理更多请求。常用步骤如下:
选择指标评估应用程序和系统的性能;
为应用程序和系统设置性能目标;
进行性能基准测试;
性能分析定位瓶颈;
优化系统和应用程序;
性能监控和告警。
(图片来自:brendangregg.com)
这个图是Linux性能分析最重要的参考资料之一。它告诉我们,在不同的子系统中出现性能问题后,应该用什么样的工具来观测和分析。
总结的思维导图如下: