在互联网公司普遍“996”的大环境下,大部分做应用的开发者,大都将精力集中在业务代码的优化和调配上,忽略了对 Linux 内核的学习。而且,这部分知识本身就很复杂,所以学习成本也比较高。

但是,只要你经历过公司业务迅速增长的阶段,就一定遇到过服务稳定性的挑战,比如:TCP 重传该怎么分析,如何在不打断运行任务的情况下排查内存泄漏问题,怎样快速解决 CPU sys 利⽤率过⾼等等。

以上面提到的 TCP 重传为例,服务器上一般都会有 TCP 重传率的监控,如图所示:

我是这样分析Linux性能问题的_人工智能

像上图中这么高的 TCP 重传率,必然会导致系统 QPS 减小。然而,当你真正去排查时,会发现根本不知从哪里入手。因为网络数据量非常大,只记录 TCP 头部信息也会产生很大存储开销,所以发生重传的现场信息无法被记录下来。

其实,定位类似 TCP 重传这样复杂的稳定性问题,不仅要从开发⼈员的视⻆分析,还要更多从系统、内核的视角出发,这样你才能追本溯源、一劳永逸地解决问题。

而大家之所以觉得这些问题难,本质上还是对 Linux 内核理解不到位。

比如,我接触过的业务开发者,基本都被业务的性能毛刺困扰过,但大多数人只能分析到是哪些系统调用引起的毛刺,而业务专家却可以深入底层,看到引发业务毛刺的系统资源。再比如,当发生 TCP 重传时,有人可以从 tcpdump 里的信息看出是哪个 TCP 连接进行重传,高手们却可以通过这些信息看到为什么会发生重传。

能深入到 Linux 内核分析问题的人,看问题能直击本质,定位、分析问题的能力都更强,往往能解决别人解决不了的问题。

事实上,如果你不是内核开发者,没有必要去搞懂它的每个细节,掌握它的每个机制,只要能通过掌握 Linux 内核知识,解决实际应用层的问题就够了,这也是邵亚方老师和极客时间开设《Linux 内核技术实战课》专栏的初衷,希望能把自己多年的 Linux 内核学习和实践经验,通过“解决问题,满足需求”的方式传递给你。

在专栏中,他从生产环境中 4 类典型问题(Page Cache 管理、内存泄漏、TCP 重传、内核态 CPU 利用率飙高)入手,带你了解:应用程序是怎样跟系统资源打交道的;如何选择业务类型的配置更好;棘手问题出现时该如何一步步排查等等,让 Linux 内核更好地服务你的应用程序。