Linux性能优化实战 / 10分钟帮你找到系统瓶颈
倪朋飞
微软资深工程师,Kubernetes项目维护者
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 别再让Linux性能问题成为你的绊脚石

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

  • 01 | 如何学习Linux性能优化?

    只要你理解了应用程序和系统的少数几个基本原理,再进行大量的实战练习,建立起整体性能的全局观,大多数性能问题的优化就会水到渠成。

  • 02 | 基础篇:到底应该怎么理解“平均负载”?

    每次发现系统变慢时,我们通常做的第一件事,就是执行top或者uptime命令,来了解系统的负载情况。

  • 03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)

    CPU 上下文切换,就是先把前一个任务的 CPU 上下文保存起来,然后加载新任务的上下文到这些寄存器和程序计数器......

  • 04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)

    今天我们就接着来看,究竟怎么分析CPU上下文切换。

  • 05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?

    今天我就带你了解 CPU 使用率的内容,同时,我也会以我们最常用的反向代理服务器 Nginx 为例,带你在一步步操作和分析中深入理解。

  • 06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?

    今天,我就用一个 Nginx + PHP 的 Web 服务的案例,带你来分析这种情况。

  • 07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)

    僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。

  • 08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)

    等待 I/O 的进程一般是不可中断状态,所以用 ps 命令找到的 D 状态的进程,多为可疑进程。

  • 09 | 基础篇:怎么理解Linux软中断?

    Linux 中的软中断包括网络收发、定时、调度、RCU锁等各种类型,可以通过查看 /proc/softirqs 来观察软中断的运行情况。

  • 10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?

    软中断的类型很多,但实际生产中,我们遇到的多为网络收发类型的软中断,特别是网络接收的软中断。

  • 11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?

    今天我就以多年的性能优化经验,给你总结出一个“又快又准”的瓶颈定位套路,告诉你在不同场景下,指标工具怎么选,性能瓶颈怎么找。

  • 12 | 套路篇:CPU 性能优化的几个思路

    发现性能问题后,不要急于动手优化,而要先找出最重要的、可以获得最大性能提升的问题,然后再从应用程序和系统两个方面入手优化。

  • 13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?

    不管因为哪个因素,自己man一下,一定是最快速并且最准确的方式。特别是,当你发现某些工具的输出不符合常识时,一定记住,第一时间查文档弄明白。

  • 14 | 答疑(二):如何用perf工具分析Java程序?

    perf 是我们每个人都需要掌握的核心工具,使用方法也很丰富,不过目前你只要会用 perf record 和 perf report 就够了。

  • 15 | 基础篇:Linux内存是怎么工作的?

    对普通进程来说,它能看到的其实是内核提供的虚拟内存,这些虚拟内存还需要通过页表,由系统映射为物理内存。

  • 16 | 基础篇:怎么理解内存中的Buffer和Cache?

    从字面上来说,Buffer是缓冲区,而Cache是缓存,两者都是数据在内存中的临时存储。

  • 17 | 案例篇:如何利用系统缓存优化程序的运行效率?

    通常,我们用缓存命中率,来衡量缓存的使用效率。

  • 18 | 案例篇:内存泄漏了,我该如何定位和处理?

    说起内存泄漏,这就要先从内存的分配和回收说起了。

  • 19 | 案例篇:为什么系统的Swap变高了(上)

    Swap把这些不常访问的内存先写到磁盘中,然后释放这些内存,给其他更需要的进程使用。

  • 20 | 案例篇:为什么系统的Swap变高了?(下)

    如果实在需要用到Swap,可以尝试降低swappiness的值,减少内存回收时Swap的使用倾向。

  • 21 | 套路篇:如何“快准狠”找到系统内存的问题?

    今天,我就来帮你梳理一下,怎样可以快速定位系统内存,并且总结了相关的解决思路。

  • 22 | 答疑(三):文件系统与磁盘的区别是什么?

    在学习时,最好先用最新的系统和工具,它们可以为你提供更简单直观的结果,帮你更好的理解系统的原理。

  • 23 | 基础篇:Linux 文件系统是怎么工作的?

    文件系统,是对存储设备上的文件进行组织管理的一种机制。

  • 24 | 基础篇:Linux 磁盘I/O是怎么工作的(上)

    Linux 存储系统的 I/O 栈,由上到下分为三个层次,分别是文件系统层、通用块层和设备层。

  • 25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)

    今天我们就来看看,磁盘的性能指标以及观测这些指标的方法。

  • 26 | 案例篇:如何找出狂打日志的“内鬼”?

    无论是操作系统,还是应用程序,都会记录大量的运行日志,以便事后查看历史记录。

  • 27 | 案例篇:为什么我的磁盘I/O延迟很高?

    今天,我们分析一个响应过慢的单词热度案例。

  • 28 | 案例篇:一个SQL查询要15秒,这是怎么回事?

    今天我们就来一起分析一个数据库的案例。

  • 29 | 案例篇:Redis响应严重延迟,如何解决?

    今天,我就带你一起来分析一个利用 Redis 作为缓存的案例。

  • 30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?

    今天,我们一起复习常见的文件系统和磁盘 I/O 性能指标,梳理了常见的 I/O 性能观测工具,并建立关联。

  • 31 | 套路篇:磁盘 I/O 性能优化的几个思路

    优化 I/O ,你可以用追加写代替随机写,减少寻址开销,加快 I/O 写的速度。

  • 32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系

    一般来说,我并不建议,把应用程序的性能优化完全建立在系统缓存上。

  • 加餐(一) | 书单推荐:性能优化和Linux 系统原理

    今天我就和你分享一些我认为不错的书。

  • 33 | 关于 Linux 网络,你必须知道这些(上)

    TCP/IP 模型,把网络互联的框架,分为应用层、传输层、网络层、网络接口层等四层。

  • 34 | 关于 Linux 网络,你必须知道这些(下)

    具体而言,哪些指标可以用来衡量 Linux 的网络性能呢?

  • 35 | 基础篇:C10K 和 C1000K 回顾

    今天我带你回顾了经典的 C10K 问题,并进一步延伸到了C1000K 和 C10M 问题。

  • 36 | 套路篇:怎么评估系统的网络性能?

    根据 TCP/IP 协议栈的原理,不同协议层关注的性能重点不完全一样,也就对应不同的性能测试方法。

  • 37 | 案例篇:DNS 解析时快时慢,我该怎么办?

    DNS 解析,说白了就是客户端与服务器交互的过程,并且这个过程还使用了 UDP 协议。

  • 38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?

    tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。

  • 39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?

    DDoS 利用大量的伪造请求,使目标服务耗费大量资源,来处理这些无效请求,进而无法正常响应正常的用户请求。

  • 40 | 案例篇:网络请求延迟变大了,我该怎么办?

    由于网络传输、网络包处理等各种因素的影响,网络延迟不可避免。但过大的网络延迟,会直接影响用户的体验。

  • 41 | 案例篇:如何优化 NAT 性能?(上)

    NAT 技术能够重写 IP 数据包的源 IP 或目的 IP,所以普遍用来解决公网 IP 地址短缺的问题。

  • 42 | 案例篇:如何优化 NAT 性能?(下)

    我们可以先从 conntrack 角度来分析,比如用 systemtap、perf 等,分析内核中 conntrack 的行文......

  • 43 | 套路篇:网络性能优化的几个思路(上)

    在优化网络性能时,你可以结合 Linux 系统的网络协议栈和网络收发流程,然后从应用程序、套接字、传输层、网络层再到链路层等,进行逐层优化。

  • 44 | 套路篇:网络性能优化的几个思路(下)

    最后,在链路层中,主要是优化网络包的收发、网络功能卸载以及网卡选项。

  • 45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?

    综合来看,客户端最大支持65535个连接,而服务器端可支持的连接数是海量的。

  • 加餐(二) | 书单推荐:网络原理和 Linux 内核实现

    任何一个高性能系统,都是多台计算机通过网络组成的集群系统。

  • 46 | 案例篇:为什么应用容器化后,启动慢了很多?

    在 Docker 容器中运行 Java 应用,一定要确保,设置容器资源限制的同时,配置好 JVM 的资源选项。

  • 47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)

    网络丢包,通常会带来严重的性能下降,特别是对 TCP 来说,丢包通常意味着网络拥塞和重传,进一步还会导致网络延迟增大、吞吐降低。

  • 48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)

    碰到丢包问题时,我们还是要从 Linux 网络收发的流程入手,结合 TCP/IP 协议栈的原理来逐层分析。

  • 49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?

    通过今天的 perf 和火焰图方法,我们进一步找出了软中断内核线程的热点函数,也就找出了潜在的瓶颈和优化方向。

  • 50 | 案例篇:动态追踪怎么用?(上)

    在 Linux 系统中,常见的动态追踪方法包括 ftrace、perf、eBPF 以及 SystemTap 等。

  • 51 | 案例篇:动态追踪怎么用?(下)

    在使用动态追踪技术时,为了得到分析目标的详细信息,一般需要内核以及应用程序的调试符号表。

  • 52 | 案例篇:服务吞吐量下降很厉害,怎么分析?

    拿目前状态跟系统原理进行比较,不一致的地方,就是我们要重点分析的对象。

  • 用户故事 | “半路出家 ”,也要顺利拿下性能优化!

    讲出你的学习故事,分享你的学习心得。

  • 53 | 套路篇:系统监控的综合思路

    USE 法把系统资源的性能指标,简化成了三个类别,即使用率、饱和度以及错误数。

  • 54 | 套路篇:应用监控的一般思路

    应用程序的监控,可以分为指标监控和日志监控两大部分。

  • 55 | 套路篇:分析性能问题的一般步骤

    系统是应用的运行环境,系统的瓶颈会导致应用的性能下降;而应用的不合理设计,也会引发系统资源的瓶颈。

  • 56 | 套路篇:优化性能问题的一般方法

    降低 CPU 使用,减少数据访问和网络 I/O,使用缓存、异步处理以及多进程多线程等,都是常用的性能优化方法。

  • 57 | 套路篇:Linux 性能工具速查

    性能分析和优化的核心,是对系统和应用程序运行原理的掌握,而性能工具只是辅助你更快完成这个过程的帮手。

  • 58 | 答疑(六):容器冷启动如何性能分析?

    镜像拉取流程,可以通过缓存热点镜像,来减少镜像拉取时间。

  • 用户故事 | 运维和开发工程师们怎么说?

    对我来说,收获最大的,是遇到问题后的解决思路——即一种由表及里的分析问题的方式;其次,就是分析工具的使用。

  • 结束语 | 愿你攻克性能难关

    我认为,技术成长最有效的路径之一,就是与他人进行交流和碰撞。

限时拼团 ¥79,立省 ¥20,点击「拼团按钮」,立即加入。

特别放送: 三大“套路”带你通关CPU性能优化

Linux性能问题一直是程序员头上的“紧箍咒”,哪怕很多工作多年的资深工程师也不例外。日常工作中我们总是会遇到这样或那样的问题:

  • 应用程序响应太慢,从哪儿入手找原因?
  • 服务器总是时不时丢包,到底要怎么办?
  • 一个SQL查询要30秒,究竟是怎么回事?
  • 内存泄漏了,该怎么定位和处理?

面对这些问题,很多人都会发怵,似乎性能问题总是不那么简单。那如何才能搞定性能优化呢?

啃下所有的大块头原理书籍?多数人都会望而却步,不能坚持,即便是学了很多底层原理,碰到问题时依然会不知所措、无从下手。向牛人请教有效的方法?但管得了一时管不了永远,你很难形成系统的知识体系。实际上,找到正确的学习方法,你完全可以更轻松、更高效地掌握性能问题的解决之道。

倪朋飞,微软Azure资深工程师,同时也是Kubernetes项目维护者,主要负责开源容器编排系统Kubernetes在Azure的落地实践。他曾任职于盛大云和腾讯,一直从事云计算领域,特别专注于IaaS和容器技术。而近十年的云计算工作经验,也让他对Linux的系统原理、常见的性能问题以及优化方式了如指掌。

在专栏里,他将会以案例驱动的思路,从实际问题出发,带你由浅入深学习一些基本底层原理,掌握常见的性能指标和工具,学习实际工作中的优化技巧,让你可以准确分析和优化大多数的性能问题。另外,专栏中会有大量的案例分析,带你实战演练,更好地消化和巩固所学。

专栏模块

专栏共60期,按照不同的视角分为5个模块。

前4个模块从资源使用的视角出发,带你分析各种 Linux 资源可能会碰到的性能问题,包括CPU 性能磁盘 I/O 性能内存性能以及网络性能,让你掌握必备的基础知识,会用常见的性能工具和解决方法。

第 5 个综合实战模块,将为你还原真实的工作场景,介绍一些开源项目、框架或者系统设计的案例的观测、剖析和调优方法,让你在“高级战场”中学习演练。

你觉得怎么样?期待您评价: