1. 什么是负载(load average)?
- 定义:单位时间内处于 可运行(r) 或 不可中断睡眠(d) 状态的 平均任务数。
- 来源:内核统计,用户态通过
/proc/loadavg
读取。 - 三个值依次代表 1 分钟、5 分钟、15 分钟 的采样结果。
- 可通过:
uptime
、top
、htop
等命令查看。
[root@k8s-node1 a]# uptime 17:16:23 up 49 days, 6:35, 4 users, load average: 1.04, 1.37, 1.65
2. 快速判断负载是否过高公式
饱和度 = loadavg / 逻辑 cpu 核数
获取cpu核数(以下命令都可):
nproc grep -c ^processor /proc/cpuinfo lscpu | grep -i cpu\(s\)\: | awk '{print $2}'
例如:
- cpu核数:32 - loadavg:6.21 # 计算(保留一位即可,第二位可四舍五入) 6.21/32=0.2 # 0.2,属于非常空闲的状态
饱和度区间 | 经验含义 | 建议 |
---|---|---|
< 0.5 | 空闲 | 资源充足 |
0.5–0.7 | 健康 | 正常业务 |
0.7–1.0 | 繁忙 | 有排队,可接受 |
1.0–1.5 | 重载 | 需要观察 |
> 1.5 | 过载 | 立即排查 |
对 延迟敏感 服务(api、游戏)可把红线降到 0.7。
3. 一条命令判断当前状态
- ①、写个脚本来获取当前负载的百分比
- load_check.sh
#!/bin/bash cores=$(nproc) read one five fifteen < /proc/loadavg sat1=$(awk -v c="$cores" -v l="$one" 'begin{printf "%.0f%%",l/c*100}') sat5=$(awk -v c="$cores" -v l="$five" 'begin{printf "%.0f%%",l/c*100}') sat15=$(awk -v c="$cores" -v l="$fifteen" 'begin{printf "%.0f%%",l/c*100}') printf "cpu饱和度:\n1 min\t5 min\t15 min\n%s\t%s\t%s\n" "$sat1" "$sat5" "$sat15"
- ②、配置别名
别名可以根据自己的喜好去自定义,定义之前请确保不要和命令冲突;
alias load="sh /路径/load_check.sh"
- ③、并写到
~/.bashrc
配置里
vim ~/.bashrc # 在最后一行追加 alias load="sh /路径/load_check.sh" # 保存退出 # source使其生效 sorce ~/.bashrc
- ④、执行别名进行测试
[root@localhost ~]# load cpu饱和度: 1 min 5 min 15 min 1% 1% 2%
就可以很明显的看到负载的饱和度,再结合上面的饱和度表,来判断是否过载;
4. 场景举例
例 1:4 核机器 load=6
饱和度 = 6/4 = 150 %(1.5) → 过载,需进一步排查。
↑ ↑
百分比 小数点
例 2:64 核机器 load=32
饱和度 = 32/64 = 50 %(0.5) → 健康,但需确认是否 io 等待。
例 3:64 核机器 load=12
饱和度 = 12/64 = 18 %(0.18) → 空闲,不用管,资源很充足。
5. 如何肉眼来判断负载是否过高?
- 1、首先需要记住此服务器的核心数
nproc
例:回显 32
心里就记住 ≈30 这条线。
- 2、把 uptime 输出切成三档 肉眼标尺
load average: 6.21, 7.50, 9.00 ↑ ↑ ↑ 1min 5min 15min
- 小于核数一半 → 空闲(32 核看 16)
- 接近核数 → 满载(32 核看 30~35)
- 明显超过核数 → 过载(>40 就红)
所以 6.21 远 < 16,秒判空闲。
- 3、口诀总结
load 数字小于核数一半 → 空;
接近核数 → 满;
远超核数 → 爆。
6. 负载高 ≠ 问题定界,可以继续进行深挖排查是什么导致的
工具 | 看啥 |
---|---|
top / htop | 按 1 展开每核,观察 cpu 是否跑满 或者top p,查看哪个cpu占用最高。 |
iostat -x 1 | 看 %util / await,确认 磁盘 io 瓶颈 utils大于80磁盘io过高 await对ssd而言,1–2就很大了,但对机械盘大于10明显感觉卡 |
vmstat 1 | 观察 r 列(运行队列) 与 b 列(阻塞队列) r正在运行 + 等待 cpu 的任务数(长期) > 核数 = cpu很堵 b处于不可中断睡眠(d 状态)的任务数 > 0 = 达到了磁盘/网络 io 瓶颈 |
以上就是linux通过uptime查看系统负载是否过高的方法的详细内容,更多关于linux uptime查看系统负载的资料请关注代码网其它相关文章!
发表评论