性能指标
学习性能优化的第一步便是了解“性能指标”这个概念。
“高并发”和“响应快”对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的角度来考察性能的,直接影响了产品终端的用户体验。跟他们对应的,是从系统资源的视角出发的指标,比如资源使用率、饱和度等。
性能分析,其实就是找出应用或系统的瓶颈,并设法去避免或者缓解它们,从而更高效地利用系统资源处理更多请求。这包含下面一系列步骤:
- 选择指标评估应用程序和系统的性能;
- 为应用程序和系统设置性能目标;
- 进行性能基准测试;
- 性能分析定位瓶颈;
- 优化系统和应用程序;
- 性能监控和告警;
学习重点
建立整体系统性能的全局观。
布伦丹·格雷格(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 结果分析(应用程序瓶颈、数据库瓶颈、系统资源瓶颈)
关键点
边学边实践