背景知识准备
对于性能优化,需要学习以下内容:
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
参考文献