0%

Linux 平均负载 - load averages

平均负载 load averages

很多文章介绍负载拿高速公路、银行取号、餐厅取餐等场景举例,有的确实能让人融会贯通,有的让刚接触的人更迷糊

其实要想很好的理解负载,看man uptime足够了

uptime

先来看下执行uptime命令的输出

1
2
localhost ~ # uptime
11:35:22 up 28 days, 21:51, 4 users, load average: 2.64 2.83 2.73
  • 11:35:22 当前时间
  • up 28 days, 21:51 系统运行(启动)时间
  • 4 users 当前系统登录用户数
  • load average: 2.64 2.83 2.73,其中2.64 2.83 2.73 分别代表过去1、5、15分钟的系统平均负载

平均负载

系统的平均负载其实就是单位时间内可运行(runnable)和不可中断(uninterruptable)的进程数量之和

  • 可运行(runnable)进程指的是正在使用CPU或等待使用CPU的进程
    对应man psPROCESS STATE CODES列出的进程状态R - running or runnable (on run queue)
  • 不可中断(uninterruptable)的进程指的是处于关键流程中的状态,比如I/O响应:进程向硬盘读写数据的时候,为了数据一致性,此时不能被打断
    对应man psPROCESS STATE CODES列出的进程状态D - uninterruptible sleep (usually IO)

理想情况下,负载数等于CPU核数(逻辑核),基于负载数和CPU核数来判断当前的过载情况,如果当前负载为1

  • 在1核CPU上,刚好完全使用
  • 在2核CPU上,CPU 50% 使用,50% 空闲
  • 在4核CPU上,CPU 25% 使用,75% 空闲

高负载场景

  • I/O密集型:最常见于CPU使用率不高,负载较高的场景
  • CPU/计算密集型
  • 大量进程,其数量远超过CPU逻辑核心数

可以通过stress工具压测,atop等工具进行性能监控,这样比较有直观感受;尤其是可以对比下不同场景下具体的性能指标体现

I/O密集型

压测命令

1
stress -i `nproc` --timeout 300

动态查看负载情况

1
watch -d uptime

atop查看整体性能情况: 可以看到DSK行变红,出现性能瓶颈

1
atop

或者mpstat: 可以看到%iowait列的值变大

1
mpstat -P ALL 2 5

CPU/计算密集型

压测命令

1
stress -c `nproc` --timeout 300

动态查看负载情况

1
watch -d uptime

atop查看整体性能情况: 可以看到所有cpu相关行变红,出现性能瓶颈

1
atop

或者mpstat: 可以看到%usr列的值几乎都是100%

1
mpstat -P ALL 2 5

大量进程

压测命令

1
stress -c $((`nproc`<<2)) --timeout 300

动态查看负载情况

1
watch -d uptime

atop查看整体性能情况: 可以看到所有cpu相关行变红,单进程占用CPU使用率不高

1
atop

或者pidstat: 可以看到%wait列的值大于或等于%usr(取决具体压测参数); 此时mpstat不能直观看出问题,也表现为%usr的值几乎都是100%

1
pidstat -u 5 1