「Linux」- 性能优化(学习路径)

背景知识准备

对于性能优化,需要学习以下内容:
1)基础知识:熟练掌握计算机原理、操作系统知识、计算机网络等等知识,熟记于心;
2)排查工具:常用性能工具使用、查看性能指标、定位性能问题;
3)经验总结:总具体的案例中总结经验,抽象出性能排查的一般思路与模式;

熟练掌握”基础原理知识“只是性能优化的开始,这些基础知识盘根错节,任何地方都可能导致性能问题。所以,并不是说掌握基础支持就等于掌握性能问题的排查方法;

性能优化学习

该部分笔记开始于 Linux 性能优化实战 的学习笔记,然后不断整理性能优化相关的内容;

CPU 性能篇 (13 讲)

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

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

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

06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上) => Linux process states
08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)

09 | 基础篇:怎么理解 Linux 软中断? => interrupts and softirqs

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

11 | 套路篇:如何迅速分析出系统 CPU 的瓶颈在哪里? => 01.CPU
12 | 套路篇:CPU 性能优化的几个思路

13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?
14 | 答疑(二):如何用 perf 工具分析 Java 程序?

内存性能篇 (8 讲)

15 | 基础篇:Linux 内存是怎么工作的?
16 | 基础篇:怎么理解内存中的 Buffer 和 Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的 Swap 变高了(上)
20 | 案例篇:为什么系统的 Swap 变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?

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

I/O 性能篇 (10 讲)

23 | 基础篇:Linux 文件系统是怎么工作的?
24 | 基础篇:Linux 磁盘 I/O 是怎么工作的(上)
25 | 基础篇:Linux 磁盘 I/O 是怎么工作的(下)
26 | 案例篇:如何找出狂打日志的“内鬼”?
27 | 案例篇:为什么我的磁盘 I/O 延迟很高?

28 | 案例篇:一个 SQL 查询要 15 秒,这是怎么回事?
29 | 案例篇:Redis 响应严重延迟,如何解决?

30 | 套路篇:如何迅速分析出系统 I/O 的瓶颈在哪里?
31 | 套路篇:磁盘 I/O 性能优化的几个思路

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

网络性能篇 (13 讲)

33 | 关于 Linux 网络,你必须知道这些(上) => 04.NETWORK
34 | 关于 Linux 网络,你必须知道这些(下)

35 | 基础篇:C10K 和 C1000K 回顾 => C10K and C10M

36 | 套路篇:怎么评估系统的网络性能? => 04.NETWORK

37 | 案例篇:DNS 解析时快时慢,我该怎么办? => dns resolution

38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量? => ping slow tcpdump and wireshark

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

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

41 | 案例篇:如何优化 NAT 性能?(上) => NAT – Network address translation

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

43 | 套路篇:网络性能优化的几个思路(上) => z.tunning
44 | 套路篇:网络性能优化的几个思路(下)

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

综合实战篇 (13 讲)

46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?

加餐篇 (4 讲)

加餐(一) | 书单推荐:性能优化和 Linux 系统原理
加餐(二) | 书单推荐:网络原理和 Linux 内核实现
用户故事 | “半路出家 ”,也要顺利拿下性能优化!
用户故事 | 运维和开发工程师们怎么说?

结束语 (1 讲)

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

结课测试 (1 讲)

结课测试|这些 Linux 性能知识你都掌握了吗?

问题排查思路

1)确定负载来源,CPU / IOWAIT

相关链接

brendangregg/perf-tools: Performance analysis tools based on Linux perf_events (aka perf) and ftrace
iovisor/bcc: BCC – Tools for BPF-based Linux IO analysis, networking, monitoring, and more
Linux Performance

perf is a performance analyzing tool in Linux.
Wikipedia/perf
Linux perf Examples

Linux 性能优化学习内容

https://static001.geekbang.org/resource/image/0f/ba/0faf56cd9521e665f739b03dd04470ba.png

参考文献

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