如何学习 Linux 性能优化

性能优化一直都是大多数软件工程师头上的“紧箍咒”,许多工作多年的资深工程师,也无法准确地分析出线上的很多性能问题。

性能问题为什么这么难呢?主要是因为性能优化是个系统工程,总是牵一发而动全身。它涉及了从程序设计、算法分析、编程语言,再到系统、存储、网络等各种底层基础设施的方方面面。每一个组件都有可能出问题,而且很有可能多个组件同时出问题。

毫无疑问,性能优化是软件系统中最有挑战的工作之一,但是换个角度看,它也是最考验体现综合能力的工作之一。如果说能把性能优化的各个关键点吃透,那可以肯定地说,我们已经是一个非常优秀的软件工程师了。
固然,性能问题的复杂性增加了学习难度,但这并不能成为我们进阶路上的“拦路虎”。其实,大多数人对性能问题“投降”,原因可能只有两个。

  1. 没找到有效的方法学原理,一听到“系统”、“底层”这些词就发怵,觉得东西太难,自己一定学不会,自然也就无法深入学下去,从而不能建立起性能的全局观。
  2. 看到性能问题的根源太复杂,既不懂怎么去分析,也不能抽丝剥茧找到瓶颈。
    此时,我们的想法就是,反正程序出了问题,上网查就是了,用别人的方法,囫囵吞枣地多试几次,
    有可能就解决了。于是,我们懒得深究这些方法为啥有效,更不知道为什么,很多方法在别人的环境有效,到我们这儿就不行了。
    所以,相同的错误重复在犯,相同的状况也是重复出现。
    其实,性能问题并没有我们想像得那么难,只要理解了应用程序和系统的少数几个基本原理,再进行大量的实战练习,建立起整体性能的全局观,大多数性能问题的优化就会水到渠成

其实有很多工程师,在分析应用程序所使用的第三方组件的性能时,并不熟悉这些组件所用的编程语言,却依然可以分析出线上问题的根源,并能通过一些方法进行优化,比如修改应用程序对它们的调用逻辑,或者调整组件的配置选项等。还是那句话,我们不需要了解每个组件的所有实现细节,只要能理解它们最基本的工作原理和协作方式,我们也可以做到。
其实我们不需要了解每个组件的所有实现细节,只要能理解它们的最基本的工作原理和协作方式,就可以做到。就如:常用的MySql数据库,sql查询慢的时候,我们不需要知道MySql底层的实现细节,我们只需要知道查询是否有没有利用到索引,MySql的性能配置等,就可以提高查询效率。

性能指标是什么?

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

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

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

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

学习的重点是什么?

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

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

Linux 性能工具图谱:
图片来自http://www.brendangregg.com/Perf/linux_perf_tools_full.png
这个图是 Linux 性能分析最重要的参考资料之一,它告诉我们,在Linux 不同子系统出现性能问题后,应该用什么样的工具来观测和分析。
比如,当遇到 I/O 性能问题时,可以参考图片最下方的 I/O 子系统,使用 iostat、 iotop、blktrace 等工具分析磁盘 I/O 的瓶颈。把这个图保存下来,在需要的时候参考查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值