平均负载

什么是平均负载?

uptime
11:02:45 up 386 days, 19:18,  1 user,  load average: 0.00, 0.01, 0.05

而最后三个数字呢,依次则是过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)。

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

查看 CPU 核数

grep 'model name' /proc/cpuinfo | wc -l

工具

  • stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
  • 而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。
    • mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
    • pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

使用

stress --cpu 1 --timeout 600
stress -i 1 --timeout 600
stress -c 8 --timeout 600

# -P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
mpstat -P ALL 5

# 间隔5秒后输出一组数据,-u表示CPU指标
pidstat -u 5 1

CPU 上下文切换

什么是 CPU 上下文

CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。

什么是 CPU 上下文切换

CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。

上下文切换场景

所以,根据任务的不同,CPU 的上下文切换就可以分为几个不同的场景,也就是进程上下文切换、线程上下文切换以及中断上下文切换。

线程是调度的基本单位,而进程则是资源拥有的基本单位。

工具

# 间隔1秒后输出1组数据
$ vmstat 1 1

# 以10个线程运行5分钟的基准测试,模拟多线程切换的问题
$ sysbench --threads=10 --max-time=300 threads run

# 每隔1秒输出1组数据(需要 Ctrl+C 才结束)
# -w参数表示输出进程切换指标,而-u参数则表示输出CPU使用指标
$ pidstat -w -u 1

# -wt 参数表示输出线程的上下文切换指标
$ pidstat -wt 1

# -d 参数表示高亮显示变化的区域
$ watch -d cat /proc/interrupts

CPU 使用率

查看 CPU 使用率

# 默认每3秒刷新一次
$ top

# 每隔1秒输出一组数据,共输出5组
$ pidstat 1 5

# -g开启调用关系分析
$ perf top

参考

[1]. Linux性能优化实战. https://time.geekbang.org/column/article/69618

欢迎分享,引用。若转载,请联系我,谢谢配合。
本文地址:https://qoogle.top/linux-performance-optimization-cpu/
最后修改日期:2020年10月9日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。