什么是平均负载?
如何彻底理解现象背后的本质原理,用起来更加灵活,也更有底气。
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 命令 也可以使用