总体概览

USE方法
USE(Utilization Saturation and Errors)
USE法把系统资源的性能指标,简化成了三个类别,使用率,饱和度,错误数

  • 使用率,表示资源用于服务的时间 或者容量的百分比,100%的使用率,笔试容器已经用尽或者全部时间都用于服务
  • 饱和度,表示资源的繁忙程度,通常与等待队列的长度相关,100%的饱和度,表示资源无法接受更多的请求
  • 错误数,表示发生错误的事件个数,错误数越多,表明系统的问题越严重

CPU 性能分析

利用 top、vmstat、pidstat、strace 以及 perf 等几个最常见的工具,获取 CPU 性能指标后, 再结合进程与 CPU 的工作原理,就可以迅速定位出 CPU 性能瓶颈的来源。

思路

  • 把进程绑定到一个或者多个 CPU 上,充分利用 CPU 缓存的本地性,并减少进程间的相互影响。
  • 为中断处理程序开启多 CPU 负载均衡,以便在发生大量中断时,可以充分利用多 CPU 的优势分摊负载。
  • 使用 Cgroups 等方法,为进程设置资源限制,避免个别进程消耗过多的 CPU。同时,为核心应用程序设置更高的优先级,减少低优先级任务的影响。

Memory 性能分析

通过 free 和 vmstat 输出的性能指标,确认内存瓶颈; 然后,再根据内存问题的类型,进一步分析内存的使用、分配、泄漏以及缓存等,最后找出问题的来源。

思路

  • 除非有必要,Swap 应该禁止掉。这样就可以避免 Swap 的额外 I/O ,带来内存访问变慢的问题。
  • 使用 Cgroups 等方法,为进程设置内存限制。这样就可以避免个别进程消耗过多内存,而影响了其他进程。对于核心应用,还应该降低 oom_score,避免被 OOM 杀死。
  • 使用大页、内存池等方法,减少内存的动态分配,从而减少缺页异常。



I/O 性能分析

使用 iostat ,发现磁盘 I/O 存在性能瓶颈(比如 I/O 使用率过高、响应时间过长或者等待队列长度突然增大等)
后,可以再通过 pidstat、 vmstat 等,确认 I/O 的来源。接着,再根据来源的不同,进一步分析文件系统和磁盘的使用率、 缓存以及进程的 I/O 等,从而揪出 I/O 问题的真凶

思路

  • 最简单的方法,通过 SSD 替代 HDD、或者使用 RAID 等方法,提升 I/O 性能。
  • 针对磁盘和应用程序 I/O 模式的特征,选择最适合的 I/O 调度算法。比如,SSD 和虚拟机中的磁盘,通常用的是 noop 调度算法;而数据库应用,更推荐使用 deadline 算法。
  • 优化文件系统和磁盘的缓存、缓冲区,比如优化脏页的刷新频率、脏页限额,以及内核回收目录项缓存和索引节点缓存的倾向等等。
  • 使用不同磁盘隔离不同应用的数据、优化文件系统的配置选项、优化磁盘预读、增大磁盘队列长度等,也都是常用的优化思路。



Network 性能分析

首先,从内核资源和网络协议的角度来说,我们可以对内核选项进行优化,比如:

  • 增大套接字缓冲区、连接跟踪表、最大半连接数、最大文件描述符数、本地端口范围等内核资源配额;
  • 减少 TIMEOUT 超时时间、SYN+ACK 重传数、Keepalive 探测时间等异常处理参数;
  • 开启端口复用、反向地址校验,并调整 MTU 大小等降低内核的负担。
  • 这些都是内核选项优化的最常见措施。

其次,从网络接口的角度来说,我们可以考虑对网络接口的功能进行优化,比如:

  • 将原来 CPU 上执行的工作,卸载到网卡中执行,即开启网卡的 GRO、GSO、RSS、VXLAN 等卸载功能;
  • 开启网络接口的多队列功能,这样,每个队列就可以用不同的中断号,调度到不同 CPU 上执行;
  • 增大网络接口的缓冲区大小以及队列长度等,提升网络传输的吞吐量。

在极限性能情况(比如 C10M)下,内核的网络协议栈可能是最主要的性能瓶颈,所以,一般会考虑绕过内核协议栈。

  • 可以使用 DPDK 技术,跳过内核协议栈,直接由用户态进程用轮询的方式,来处理网络请求。同时,再结合大页、CPU - 绑定、内存对齐、流水线并发等多种机制,优化网络包的处理效率。
  • 还可以使用内核自带的 XDP 技术,在网络包进入内核协议栈前,就对其进行处理。这样,也可以达到目的,获得很好的性能。



Test Tools

一些常用的测试工具

  • I/O: fio 工具,测试了磁盘 I/O 的性能,dd 也可以
  • 网络: iperf、pktgen 等,
  • 应用层: ab、wrk 等,测试 Nginx 应用的性能
  • 压测: stress,sysbench

Summary

Brendan Gregg 整理的性能工具谱图

相关资源