看了一遍第一阶段的cpu性能篇,对cpu性能分析有一个大概的了解;由于遗忘的缘故,花了点时间重新阅读一遍,顺便写下第一阶段的总结。以前对linux性能优化的场景没接触过,对运用linux上的软件(perf)可以直接分析出源码上的问题感到惊讶,这让我觉得学习这个专栏非常有必要的。

那么什么是性能优化?随着应用负载的增加,系统资源的使用也会升到,有可能导致系统资源达到了瓶颈。我们要找出应用或者系统的瓶颈,并设法去避免缓解他们。

总结了一下,第一阶段CPU性能篇的性能指标:

1.平均负载(Load Average)

  • 平均负载:单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
  • 导致平均负载高的三个场景:cpu密集型、i/o密集型、大量进程
  • 分析工具:uptime、mpstat、pidstat

2.进程上下文切换

  • 上下文切换:先把前一个任务的CPU上下文保存起来,然后加载新任务的上下文到这些寄存器和程序计数器中,最后再跳转到程序计数器所指的新位置,运行新任务。
  • 上线文切换:进程上下文切换、线程上下文切换、中断上下文切换
  • 指标:
    • 自愿上下文切换:无法获取资源导致
    • 非自愿上下文切换:被系统强制调度导致
    • 分析工具:vmstat、pidstat(-w线程-t进程)、/proc/interrupts(中断)

3.CPU使用率

  • cpu使用率:就是除了空闲时间外的其他时间占总CPU时间的百分比
  • 指标:
    • 用户CPU使用率:包括用户态 CPU 使用率(%user)和低优先级用户态 CPU 使用率 (%nice)
    • 系统 CPU 使用率:(%system)表示 CPU 在内核态运行的时间百分比(不包括中断)。
    • 等待 I/O 的CPU使用率:通常也称为 iowait
      • 分析工具:top、ps、pidstat、perf、pstree、execsnoop
    • 软中断和硬中断的 CPU 使用率:中断是一种起步的事件处理机制,可以提高系统并发处理
    • 中断(%irq)、软中断(%softirq)
    • 软中断分析工具:ps、/proc/softirqs、/proc/interrupts、sar、tcpdump
    • 不可中断进程-分析工具:top、dstat、pidstat、perf
    • 僵尸进程-分析工具:top、pstree 4.cpu缓存命中

优化的方法:

  1. 应用层面:编译器优化、算法优化、异步处理、多线程代替多进程、善用缓存
  2. 系统优化:CPU 绑定、优先级调整、为进程设置资源限制、NUMA优化、中断负载均衡