zdq0394.github.com

Tech study and research.

Follow me on GitHub

Linux性能

性能问题分析

Linux性能问题分析的一般思路如下:

  1. 系统资源瓶颈 对系统资源瓶颈,可以使用USE(Utilization、Saturation、Errors)方法,及使用率、饱和度、错误数三方面入手,分别考察CPU、内存、磁盘、网络等硬资源瓶颈以及文件描述符数、连接数、连接跟踪数等软资源瓶颈。
  2. 应用程序瓶颈 应用程序瓶颈可以从占用资源瓶颈、依赖服务瓶颈和应用自身瓶颈三个角度分别分析。
    • 占用资源瓶颈方法和系统资源瓶颈是一样的,只是针对单个进程而言。
    • 依赖服务瓶颈可以使用全链路跟踪技术进行排查。
    • 应用程序自身瓶颈可以通过strace、perf等工具以及火焰图进行定位和分析,当然还可以通过查看日志进行分析。

性能优化

对应的性能优化也分为系统层面和应用层面。

系统优化

  1. CPU优化
    • 进程绑定到特定CPU,充分利用CPU缓存的本地性,减少进程间的相互影响。
    • 为中断处理程序开启多CPU负载均衡,以便在大量中断发生时,可以充分利用多CPU的优势分摊负载。
    • 使用Cgroup方法限制CPU使用率,减少进程间的相互影响。
  2. 内存优化
    • 除非有必要,swap应该禁止掉。
    • 可以使用大页、内存池等方法减少内存动态分配,减少缺页异常。
  3. 磁盘和文件系统I/O
    • 使用SSD替代HDD
    • 针对磁盘和应用程序I/O模式的特征,选择合适的I/O调度算法,比如SSD和虚拟机中的磁盘可以采用noop调度算法,而数据库应用通常采用deadline算法。
    • 优化文件系统和磁盘的缓存、缓冲区。
  4. 网络优化
    • 增大套接字缓冲区、连接跟踪表、最大半连接数、最大文件描述符数、本地端口范围等内核资源配额。
    • 减少TIMEOUT超时时间、SYN+ACK重传数、keepalive探测时间等异常处理参数。
    • 可以端口复用、反向地址校验,并调整MTU大小等降低内核负担。
    • 使用DPDK、XDP等技术

应用程序优化