You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
7.0 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 开篇词 | 别再让Linux性能问题成为你的绊脚石
你好我是倪朋飞一个云计算老兵Kubernetes项目维护者主要负责开源容器编排系统Kubernetes在Azure的落地实践。
一直以来,我都在云计算领域工作。对于服务器性能的关注,可以追溯到我刚参加工作那会儿。为什么那么早就开始探索性能问题呢?其实是源于一次我永远都忘不了的“事故”。
那会儿我在盛大云工作忙活了大半夜把产品发布上线后刚刚躺下打算休息却突然收到大量的告警。匆忙爬起来登录到服务器之后我发现有一些系统进程的CPU使用率高达 100%。
当时我完全是两眼一抹黑,可以说是只能看到症状,却完全不知道该从哪儿下手去排查和解决它。直到最后,我也没能想到好办法,这次发布也成了我心中之痛。
从那之后我开始到处查看各种相关书籍从操作系统原理、到Linux内核再到硬件驱动程序等等。可是学了那么多知识之后我还是不能很快解决类似的性能问题。
于是我又通过网络搜索或者请教公司的技术大拿学习了大量性能优化的思路和方法这期间尝试了大量的Linux性能工具。在不断的实践和总结后我终于知道怎么**把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序、库函数、系统调用、再到内核和硬件等不同的层级贯穿起来。**
这段学习可以算得上是我的“黑暗”经历了。我想,不仅是我一个人,很多人应该都有过这样的挫折。比如说:
* 流量高峰期服务器CPU使用率过高报警你登录Linux上去top完之后却不知道怎么进一步定位到底是系统CPU资源太少还是程序并发部分写的有问题
* 系统并没有跑什么吃内存的程序但是敲完free命令之后却发现系统已经没有什么内存了那到底是哪里占用了内存为什么
* 一大早就收到Zabbix告警你发现某台存放监控数据的数据库主机的iowait较高这个时候该怎么办
这些问题或者场景,你肯定或多或少都遇到过。
实际上,**性能优化一直都是大多数软件工程师头上的“紧箍咒”**,甚至许多工作多年的资深工程师,也无法准确地分析出线上的很多性能问题。
性能问题为什么这么难呢?我觉得主要是因为性能优化是个系统工程,总是牵一发而动全身。它涉及了从程序设计、算法分析、编程语言,再到系统、存储、网络等各种底层基础设施的方方面面。每一个组件都有可能出问题,而且很有可能多个组件同时出问题。
毫无疑问,性能优化是软件系统中最有挑战的工作之一,但是换个角度看,**它也是最考验体现你综合能力的工作之一**。如果说你能把性能优化的各个关键点吃透,那我可以肯定地说,你已经是一个非常优秀的软件工程师了。
那怎样才能掌握这个技能呢?你可以像我前面说的那样,花大量的时间和精力去钻研,从内功到实战一一苦练。当然,那样可行,但也会走很多弯路,而且可能你啃了很多大块头的书,终于拿下了最难的底层体系,却因为缺乏实战经验,在实际开发工作中仍然没有头绪。
其实,对于我们大多数人来说,**最好的学习方式一定是带着问题学习**,而不是先去啃那几本厚厚的原理书籍,这样很容易把自己的信心压垮。
我认为,**学习要会抓重点**。其实只要你了解少数几个系统组件的基本原理和协作方式,掌握基本的性能指标和工具,学会实际工作中性能优化的常用技巧,你就已经可以准确分析和优化大多数的性能问题了。在这个认知的基础上,再反过来去阅读那些经典的操作系统或者其它图书,你才能事半功倍。
所以,在这个专栏里,我会以**案例驱动**的思路给你讲解Linux性能的基本指标、工具以及相应的观测、分析和调优方法。
具体来看我会分为5个模块。前4个模块我会从资源使用的视角出发带你分析各种Linux资源可能会碰到的性能问题包括 **CPU 性能**、**磁盘 I/O 性能**、**内存性能**以及**网络性能**。每个模块还由浅入深划分为四个不同的篇章。
* **基础篇**介绍Linux必备的基本原理以及对应的性能指标和性能工具。比如怎么理解平均负载怎么理解上下文切换Linux内存的工作原理等等。
* **案例篇**,这里我会通过模拟案例,帮你分析高手在遇到资源瓶颈时,是如何观测、定位、分析并优化这些性能问题的。
* **套路篇**,在理解了基础,亲身体验了模拟案例之后,我会帮你梳理出排查问题的整体思路,也就是检查性能问题的一般步骤,这样,以后你遇到问题,就可以按照这样的路子来。
* **答疑篇**,我相信在学习完每一个模块之后,你都会有很多的问题,在答疑篇里,我会拿出提问频次较高的问题给你系统解答。
第 5 个综合实战模块,我将为你还原真实的工作场景,手把手带你在“**高级战场**”中演练,这样你能把前面学到的所有知识融会贯通,并且看完专栏,马上就能用在工作中。
整个专栏,我会把内容尽量写得通俗易懂,并帮你划出重点、理出知识脉络,再通过案例分析和套路总结,让你学得更透、用得更熟。
明天就要正式开课了,开始之前,我要把何炅说过的那句我特别认同的鸡汤送给你,“**想要得到你就要学会付出,要付出还要坚持;如果你真的觉得很难,那你就放弃,如果你放弃了就不要抱怨。人生就是这样,世界是平衡的,每个人都是通过自己的努力,去决定自己生活的样子。**”
不为别的,就希望你能和我坚持下去,一直到最后一篇文章。这中间,有想不明白的地方,你要先自己多琢磨几次;还是不懂的,你可以在留言区找我问;有需要总结提炼的知识点,你也要自己多下笔。你还可以写下自己的经历,记录你的分析步骤和思路,我都会及时回复你。
最后你可以在留言区给自己立个Flag**哪怕只是在留言区打卡你的学习天数,我相信都是会有效果的**。3个月后我们一起再来验收。
总之让我们一起携手为你交付“Linux性能优化”这个大技能
[![unpreview](https://static001.geekbang.org/resource/image/19/bc/19bc90ffcf4b1fba4938727e5bc0ecbc.jpg?wh=1029*315)](time://mall?url=https%3A%2F%2Fshop18793264.youzan.com%2Fv2%2Fgoods%2F1y7qqgp3ghd2g%3Fdc_ps%3D2347114008676525065.200001)
Linux知识地图2.0典藏版现货发售2000份把5米长的图谱装进背包1分钟定位80%的高频问题。