linux-optimize001

什么是平均负载?

如何彻底理解现象背后的本质原理,用起来更加灵活,也更有底气。

uptime 命令 每一列的输出含义

当前时间 系统运行时间 正在登录的用户数

依次是过去一分钟 五分钟 15分钟的平均负载

平均负载是其实简单理解 就是平均活跃进程数

平均负载为2 时 代表什么?

  • 在2核的cpu的系统上 代表所有的cpu都刚好被完全占用
  • 在4核的cpu的系统上 代表有50%的空闲
  • 在1核的cpu的系统上 意味着有一半的进程竞争不到cpu

那么

平均负载为多少时合理?

一般而言 最理想的情况是等于cpu的个数 首先得知道系统有几个cpu

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

有了cpu的个数 可以判断出平均负载比cpu的个数还大的时候,系统已经出现了过载。

一半当平均负载高于cpu数量70%的时候,就应该分析排查负载高的问题了

平均负载是单位时间内,处于可运行状态和不可中断状态的进程数,因此不止包括了正在使用cpu的进程,还包括等待cpu和等待io的进程

cpu使用率 是单位时间内cpu繁忙情况的统计 跟平均负载并不一定完全对应

  • cpu密集型时 两者一致
  • io密集时 等待io也会导致平均负载很高 但是cpu使用率不一定很高
  • 大量等待cpu的进程调度也会导致平均负载升高,此时的cpu使用率也会比较高

善于使用工具

使用 iostat mpstat pidstat 等工具 找到平均负载升高的根源在哪里

1
apt install stress sysstat -y

压力测试工具

异常进程模拟平均负载升高的场景

1
stress --cpu 1 --timeout 600
1
watch -d uptime
1
mpstat -P ALL 5
1
pidstat -u 5 1
1
stress -i 1 --timeout 600

模拟大量进程

1
stress -c 8 --timeout 600

iowait 无法升高的原因 是因为使用的是sync()系统调用 作用是刷新缓冲内存到磁盘中 可以使用下一代 stress-ng

htop atop 命令 也可以使用