<audio id="audio" title="开篇词 | 别再让Linux性能问题成为你的绊脚石" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/06/18/06cedcb5e74c88cec921ac260069e918.mp3"></audio>

你好，我是倪朋飞，微软Azure的资深工程师，同时也是Kubernetes项目维护者，主要负责开源容器编排系统Kubernetes在Azure的落地实践。

一直以来，我都在云计算领域工作。对于服务器性能的关注，可以追溯到我刚参加工作那会儿。为什么那么早就开始探索性能问题呢？其实是源于一次我永远都忘不了的“事故”。

那会儿我在盛大云工作，忙活了大半夜把产品发布上线后，刚刚躺下打算休息，却突然收到大量的告警。匆忙爬起来登录到服务器之后，我发现有一些系统进程的CPU使用率高达 100%。

当时我完全是两眼一抹黑，可以说是只能看到症状，却完全不知道该从哪儿下手去排查和解决它。直到最后，我也没能想到好办法，这次发布也成了我心中之痛。

从那之后，我开始到处查看各种相关书籍，从操作系统原理、到Linux内核，再到硬件驱动程序等等。可是，学了那么多知识之后，我还是不能很快解决类似的性能问题。

于是，我又通过网络搜索，或者请教公司的技术大拿，学习了大量性能优化的思路和方法，这期间尝试了大量的Linux性能工具。在不断的实践和总结后，我终于知道，怎么**把观察到的性能问题跟系统原理关联起来，特别是把系统从应用程序、库函数、系统调用、再到内核和硬件等不同的层级贯穿起来。**

这段学习可以算得上是我的“黑暗”经历了。我想，不仅是我一个人，很多人应该都有过这样的挫折。比如说：

<li>
流量高峰期，服务器CPU使用率过高报警，你登录Linux上去top完之后，却不知道怎么进一步定位，到底是系统CPU资源太少，还是程序并发部分写的有问题？
</li>
<li>
系统并没有跑什么吃内存的程序，但是敲完free命令之后，却发现系统已经没有什么内存了，那到底是哪里占用了内存？为什么？
</li>
<li>
一大早就收到Zabbix告警，你发现某台存放监控数据的数据库主机的iowait较高，这个时候该怎么办？
</li>

这些问题或者场景，你肯定或多或少都遇到过。

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

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

毫无疑问，性能优化是软件系统中最有挑战的工作之一，但是换个角度看，**它也是最考验体现你综合能力的工作之一**。如果说你能把性能优化的各个关键点吃透，那我可以肯定地说，你已经是一个非常优秀的软件工程师了。

那怎样才能掌握这个技能呢？你可以像我前面说的那样，花大量的时间和精力去钻研，从内功到实战一一苦练。当然，那样可行，但也会走很多弯路，而且可能你啃了很多大块头的书，终于拿下了最难的底层体系，却因为缺乏实战经验，在实际开发工作中仍然没有头绪。

其实，对于我们大多数人来说，**最好的学习方式一定是带着问题学习**，而不是先去啃那几本厚厚的原理书籍，这样很容易把自己的信心压垮。

我认为，**学习要会抓重点**。其实只要你了解少数几个系统组件的基本原理和协作方式，掌握基本的性能指标和工具，学会实际工作中性能优化的常用技巧，你就已经可以准确分析和优化大多数的性能问题了。在这个认知的基础上，再反过来去阅读那些经典的操作系统或者其它图书，你才能事半功倍。

所以，在这个专栏里，我会以**案例驱动**的思路，给你讲解Linux性能的基本指标、工具，以及相应的观测、分析和调优方法。

具体来看，我会分为5个模块。前4个模块我会从资源使用的视角出发，带你分析各种Linux资源可能会碰到的性能问题，包括 **CPU 性能**、**磁盘 I/O 性能**、**内存性能**以及**网络性能**。每个模块还由浅入深划分为四个不同的篇章。

<li>
**基础篇**，介绍Linux必备的基本原理以及对应的性能指标和性能工具。比如怎么理解平均负载，怎么理解上下文切换，Linux内存的工作原理等等。
</li>
<li>
**案例篇**，这里我会通过模拟案例，帮你分析高手在遇到资源瓶颈时，是如何观测、定位、分析并优化这些性能问题的。
</li>
<li>
**套路篇**，在理解了基础，亲身体验了模拟案例之后，我会帮你梳理出排查问题的整体思路，也就是检查性能问题的一般步骤，这样，以后你遇到问题，就可以按照这样的路子来。
</li>
<li>
**答疑篇**，我相信在学习完每一个模块之后，你都会有很多的问题，在答疑篇里，我会拿出提问频次较高的问题给你系统解答。
</li>

第 5 个综合实战模块，我将为你还原真实的工作场景，手把手带你在“**高级战场**”中演练，这样你能把前面学到的所有知识融会贯通，并且看完专栏，马上就能用在工作中。

整个专栏，我会把内容尽量写得通俗易懂，并帮你划出重点、理出知识脉络，再通过案例分析和套路总结，让你学得更透、用得更熟。

明天就要正式开课了，开始之前，我要把何炅说过的那句我特别认同的鸡汤送给你，“**想要得到你就要学会付出，要付出还要坚持；如果你真的觉得很难，那你就放弃，如果你放弃了就不要抱怨。人生就是这样，世界是平衡的，每个人都是通过自己的努力，去决定自己生活的样子。**”

不为别的，就希望你能和我坚持下去，一直到最后一篇文章。这中间，有想不明白的地方，你要先自己多琢磨几次；还是不懂的，你可以在留言区找我问；有需要总结提炼的知识点，你也要自己多下笔。你还可以写下自己的经历，记录你的分析步骤和思路，我都会及时回复你。

最后，你可以在留言区给自己立个Flag，**哪怕只是在留言区打卡你的学习天数，我相信都是会有效果的**。3个月后，我们一起再来验收。

总之，让我们一起携手，为你交付“Linux性能优化”这个大技能！

[<img src="https://static001.geekbang.org/resource/image/19/bc/19bc90ffcf4b1fba4938727e5bc0ecbc.jpg" alt="unpreview">](time://mall?url=https%3A%2F%2Fshop18793264.youzan.com%2Fv2%2Fgoods%2F1y7qqgp3ghd2g%3Fdc_ps%3D2347114008676525065.200001)

Linux知识地图2.0典藏版，现货发售2000份，把5米长的图谱装进背包，1分钟定位80%的高频问题。
