性能指标
学习性能优化的第一步便是了解“性能指标”这个概念。
 “高并发”和“响应快”对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的角度来考察性能的,直接影响了产品终端的用户体验。跟他们对应的,是从系统资源的视角出发的指标,比如资源使用率、饱和度等。
 
 性能分析,其实就是找出应用或系统的瓶颈,并设法去避免或者缓解它们,从而更高效地利用系统资源处理更多请求。这包含下面一系列步骤:
- 选择指标评估应用程序和系统的性能;
- 为应用程序和系统设置性能目标;
- 进行性能基准测试;
- 性能分析定位瓶颈;
- 优化系统和应用程序;
- 性能监控和告警;
学习重点
建立整体系统性能的全局观。
 布伦丹·格雷格(Brendan Gregg)的Linux性能工具图谱如下,
 
 需要注意工具的选用,先理解原理,再结合具体场景,融会贯通系统的不同组件,灵活运用,
学习Linux性能优化分为下面几个部分:
-  CPU 
 1.1 进程和CPU原理
 1.2 性能指标(平均负载、CPU使用率、上下文切换、CPU缓存命中率)
 1.3 性能剖析(top/ps、vmstat、mpstat、sar、pidstat、strace、perf、execsnoop、proc文件系统)
 1.4 调优方法(CPU绑定、进程CPU资源限制、进程优先级调整、中断负载均衡、CPU缓存、NUMA优化)
-  内存 
 2.1 内存原理
 2.2 性能指标(系统内存使用量、进程内存使用量、缓存与缓冲区命中率、SWAP使用量)
 2.3 性能剖析(free、top、sar、vmstat、cachestat、cachetop、memleak、proc文件系统)
 2.4 调优方法(利用缓存与缓冲区、减少SWAP使用、减少动态内存分配、优化NUMA、限制进程内存资源、使用HugePage)
-  网络 
 3.1 网络原理
 3.2 性能指标(吞吐量、延迟、丢包、TCP重传)
 3.3 性能剖析(ethtool、sar、ping、netstat/ss、ifstat、ifconfig、tcpdump、wireshark、iptables、traceroute、ipcontrack、perf)
 3.4 调优方法(网卡调优、协议调优、资源控制、内核调优)
-  磁盘IO 
 4.1 磁盘原理
 4.2 性能指标(使用率、IOPS、吞吐量、IOWAIT)
 4.3 性能剖析(dstat、sar、iostat、pidstat、iotop、iolatency、blktrace、fio、perf)
 4.4 调优方法(系统条用、I/O资源控制、充分利用缓存、RAID、I/O隔离)
-  文件系统 
 5.1 文件系统原理
 5.2 性能指标(容量、IOPS、缓存命中率)
 5.3 性能剖析(df、strace、vmstat、sar、perf、proc文件系统)
 5.4 调优方法(文件系统选型、利用文件系统缓存、I/O隔离)
-  Linux内核 
 6.1 内核原理
 6.2 性能剖析(BPF、perf、proc文件系统)
 6.3 调优方法(内核选项)
-  应用程序 
 7.1 文件系统原理
 7.2 性能指标(吞吐量、响应时间、资源使用率)
 7.3 性能剖析(USE方法、进程剖析、APM)
 7.4 调优方法(逻辑简化、编程语言、算法调优、非阻塞I/O、利用缓存与缓冲区、异步处理与并发、垃圾回收)
-  架构设计 
 8.1 空间换时间(缓存、缓冲区、冗余数据)
 8.2 时间换空间(压缩编码、页面交换)
 8.3 并行处理(多线程、多进程、分布式)
 8.4 异步处理(异步I/O、消息队列、事件通知)
-  性能监控 
 9.1 时间序列分析(历史趋势分析、性能模型构建、未来趋势预测)
 9.2 服务调用追踪(服务调用流程跟踪、服务调用性能分析、服务调用链拓扑展示)
 9.3 数据可视化(趋势图、散点图、热图、饼图)
 9.4 告警通知(阈值选择、报警策略、通知渠道)
 10.性能测试
 10.1 明确需求(系统资源需求、应用程序需求)
 10.2 环境假设(合理的假设、生产环境模拟、生产负载模拟)
 10.3 性能测试(基准测试、负载测试、压力测试)
 10.4 结果分析(应用程序瓶颈、数据库瓶颈、系统资源瓶颈)
关键点
边学边实践



















