1. 性能优化步骤
- 指标选择
- 指标目标
- 基准测试
- 瓶颈定位
- 应用优化
- 监控和告警
2. 工具图谱
3. 应用性能分析和优化
3.1. 应用程序分析
- 性能指标:吞吐量、响应时间、资源使用率
- 性能剖析:
- USE方法:使用率、饱和度、错误率
- 进程分析:进程状态、资源使用率、I/O剖析、系统调用、热点函数、动态追踪
- APM工具
- 调优方式:逻辑简化、编程语言选择、算法调优、NIO、利用缓存与缓冲区、异步处理和并发、GC
3.2. 应用性能监控
- 时间序列分析:历史趋势分析、性能模型构建、未来趋势预测
- 服务调研追踪:链路调用跟踪、调用性能分析、链路拓扑
- 数据可视化:趋势图、散点图、热图、饼图
- 告知通知:阈值选择、告警策略、通知渠道
3.3. 应用性能测试
- 明确需求:系统资源需求、应用程序需求
- 环境假设:合理假设、生产模拟、生产负载模拟
- 性能测试:基准测试、负载测试、压力测试
- 结果分析:应用程序瓶颈、数据库、系统资源瓶颈
4. 系统资源诊断和优化
4.1. CPU
- 进程和CPU原理:进程与线程、CPU调度、系统中断、CPU缓存、NUMA
- 性能指标:平均负载、CPU使用率(用户CPU、系统CPU、IOWAIT、软中断、硬中断、窃取CPU、客户CPU)
- 上下文切换:自愿、非自愿
- CPU缓存命中率
4.2. 内存
- 内存原理:地址空间、虚拟内存、内存分配和回收、缓存和缓冲区、SWAP
- 性能指标:系统内存使用量、进程内存使用量、缓存命中率、SWAP使用率
- 性能剖析:free,top,sar,vmstat,cachestat,cachetop,memleak,proc文件系统
- 调优方式:利用缓存和缓冲区、减少swap使用、减少动态内存分配、使用NUMA、限制进程内存资源、使用hugePage
4.3. 磁盘IO
- 磁盘原理:磁盘管理、磁盘类型、磁盘接口、磁盘I/O栈
- 性能指标:使用率、IOPS、吞吐量、IOWAIT
- 性能剖析:dstat,sar,iostat,pidstat,iotop,iolatency,blktrace,fio,perf
- 调优方法:系统调用、I/O资源控制、充分利用缓存、RAID、I/O隔离
4.4. 网络
- 网络原理:网络配置、TCP/IP协议、网络收发流程、高级路由、网络QoS、网络防火墙、C10K和10M
- 性能指标:吞吐量(BPS,QPS,PPS)、延迟、丢包、TCP重传
- 性能剖析:ethtool,sar,ping,netstat/ss,ifstat,ifconfig,tcpdump,wireshark,iptables,traceroute,ipcontrack,perf
- 调优方式:网卡调优(MTU,队列长度,链路聚合)、协议调优(HTTP、TCP、Overlay)、内核调参(NAT、功能卸载、负载均衡、DPDK)
4.5. 文件系统
- 文件系统原理:虚拟文件系统、I/O栈、文件系统缓存、文件系统种类
- 性能指标: 容量,IOPS,缓存命中率
- 性能剖析: df,strace,vmstat,sar,perf
- 调优方式: 文件系统选型、文件系统缓存、I/O隔离
5. 架构设计优化
- 空间换时间:缓存、缓冲、数据冗余
- 时间换空间:压缩传输、页面交换
- 并发处理:多进程、多线程、分布式
- 异步处理:异步I/O、消息队列、事件通知
6. Linux内核优化
- 内核原理:内核态
- 性能剖析:BPF、perf、proc文件系统、内核参数调优