排查Linux性能问题一般步骤

文章目录

    • 工具架构图谱
    • 一、CPU
      • CPU性能指标
      • 根据指标找工具
      • 根据工具查指标
      • CPU性能分析步骤
    • 二、内存
      • CPU性能指标
      • 根据指标找工具
      • 根据工具查指标
      • 内存性能分析步骤
    • 三、I/O
      • I/O性能指标
      • 根据指标找工具
      • 根据工具查指标
      • I/O能分析步骤
    • 四、网络
      • 网络收发流程
      • 应用程序优化
        • 网络 I/O 的角度
        • 进程的工作模型
      • 套接字优化
      • 传输层优化
      • 网络层优化
        • 从路由和转发的角度
        • 从分片的角度出发
        • 从 ICMP 角度
      • 链路层优化
    • 五、应用程序

工具架构图谱

排查Linux性能问题一般步骤_第1张图片

一、CPU

CPU性能指标

排查Linux性能问题一般步骤_第2张图片

根据指标找工具

排查Linux性能问题一般步骤_第3张图片

根据工具查指标

排查Linux性能问题一般步骤_第4张图片

CPU性能分析步骤

排查Linux性能问题一般步骤_第5张图片

二、内存

CPU性能指标

排查Linux性能问题一般步骤_第6张图片

根据指标找工具

排查Linux性能问题一般步骤_第7张图片

根据工具查指标

排查Linux性能问题一般步骤_第8张图片

内存性能分析步骤

排查Linux性能问题一般步骤_第9张图片

三、I/O

I/O性能指标

排查Linux性能问题一般步骤_第10张图片

根据指标找工具

排查Linux性能问题一般步骤_第11张图片

根据工具查指标

排查Linux性能问题一般步骤_第12张图片

I/O能分析步骤

排查Linux性能问题一般步骤_第13张图片

四、网络

网络收发流程

排查Linux性能问题一般步骤_第14张图片

应用程序优化

网络 I/O 的角度

1、第一种是最常用的 I/O 多路复用技术 epoll,主要用来取代 select 和 poll。这其实是解决C10K 问题的关键,也是目前很多网络应用默认使用的机制。
2、第二种是使用异步 I/O(Asynchronous I/O,AIO)。AIO 允许应用程序同时发起很多I/O 操作,而不用等待这些操作完成。等到 I/O 完成后,系统会用事件通知的方式,告诉应用程序结果。

进程的工作模型

1、第一种,主进程 + 多个 worker 子进程。其中,主进程负责管理网络连接,而子进程负责实际的业务处理。这也是最常用的一种模型。
2、第二种,监听到相同端口的多进程模型。在这种模型下,所有进程都会监听相同接口,并且开启 SO_REUSEPORT 选项,由内核负责,把请求负载均衡到这些监听进程中去。

套接字优化

提高网络的吞吐量,需要调整这些缓冲区的大小
排查Linux性能问题一般步骤_第15张图片

传输层优化

排查Linux性能问题一般步骤_第16张图片

网络层优化

从路由和转发的角度

1、在需要转发的服务器中,比如用作 NAT 网关的服务器或者使用 Docker 容器时,开启IP 转发,即设置 net.ipv4.ip_forward = 1。
2、调整数据包的生存周期 TTL,比如设置 net.ipv4.ip_default_ttl = 64。注意,增大该值会降低系统性能。
3、开启数据包的反向地址校验,比如设置 net.ipv4.conf.eth0.rp_filter = 1。这样可以防止 IP 欺骗,并减少伪造 IP 带来的 DDoS 问题。

从分片的角度出发

主要的是调整 MTU

从 ICMP 角度

禁止 ICMP 协议,即设置 net.ipv4.icmp_echo_ignore_all = 1。这样,外部主机就无法通过 ICMP 来探测主机 或者 禁止广播 ICMP,即设置 net.ipv4.icmp_echo_ignore_broadcasts =1。

链路层优化

在链路层中,主要是优化网络包的收发、网络功能卸载以及网卡选项

五、应用程序

1、第一种资源瓶颈,其实还是指刚才提到的 CPU、内存、磁盘和文件系统 I/O、网络以及内核资源等各类软硬件资源出现了瓶颈,从而导致应用程序的运行受限。对于这种情况,我们就可以用前面系统资源瓶颈模块提到的各种方法来分析。

2、第二种依赖服务的瓶颈,也就是诸如数据库、分布式缓存、中间件等应用程序,直接或者间接调用的服务出现了性能问题,从而导致应用程序的响应变慢,或者错误率升高。这说白了就是跨应用的性能问题,使用全链路跟踪系统,就可以帮你快速定位这类问题的根源。

3、应用程序自身的性能问题,包括了多线程处理不当、死锁、业务算法的复杂度过高等等。对于这类问题,在我们前面讲过的应用程序指标监控以及日志监控中,观察关键环节的耗时和内部执行过程中的错误,就可以帮你缩小问题的范围。

你可能感兴趣的:(性能分析与调试)