news 2026/6/24 12:22:47

03. 从零带你学习Linux内核:proc

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
03. 从零带你学习Linux内核:proc

/proc/loadavg

这一节核心解决一个问题:

load average 不是 CPU 使用率。它更像“系统当前有多少任务在排队等资源”。

你之前学的/proc/stat是算 CPU 使用率;现在的/proc/loadavg是看系统负载压力。两者相关,但不是一个东西。


1. 先看/proc/loadavg输出

执行:

cat/proc/loadavg

可能看到:

0.45 0.12 0.04 4/125 5549

或者:

1.06 0.84 0.77 1/871 44089

文章里也解释了,/proc/loadavg保存 CPU 和磁盘 I/O 相关的负载平均值,前三列类似uptime命令里的 load average;第四列是当前调度实体数量信息,第五列是最近创建的 PID。


2. 每一列是什么意思

以这个为例:

0.45 0.12 0.04 4/125 5549
字段含义
0.45最近 1 分钟平均负载
0.12最近 5 分钟平均负载
0.04最近 15 分钟平均负载
4/125当前正在运行或可运行的任务数 / 当前系统总调度实体数
5549最近创建的进程 PID

你先重点记前三个:

1分钟负载 / 5分钟负载 / 15分钟负载

它们用来看系统压力趋势。


3. load average 到底表示什么

小白版:

load average 表示一段时间内,系统中有多少任务正在运行,或者正在等 CPU / I/O 等资源。

更准确地说,Linux 的 load average 统计的是:

可运行状态任务 TASK_RUNNING + 不可中断睡眠状态任务 TASK_UNINTERRUPTIBLE

你可以理解成两类任务:

1. 正在 CPU 上跑,或者等 CPU 调度的任务 2. 卡在不可中断 I/O 等待里的任务,比如等磁盘

所以 load 高不一定是 CPU 忙,也可能是 I/O 卡住。


4. 为什么 load average 不是 CPU 使用率

CPU 使用率是百分比:

CPU 使用率 = CPU 这一段时间忙了多少比例

比如:

CPU 使用率 80%

表示 CPU 80% 时间在执行任务。

但 load average 是任务队列压力:

load average = 平均有多少个任务处于运行/等待资源状态

比如:

load = 4.0

表示平均有大约 4 个任务处于运行或等待资源状态。

所以二者不是一个量纲。

指标来自哪里含义单位
CPU 使用率/proc/statCPU 忙碌时间比例百分比
load average/proc/loadavg平均活跃/等待任务数任务数量

5. 一个最简单的类比

把 CPU 想成食堂打饭窗口。

CPU 使用率

窗口有多忙:

窗口 80% 时间都在打饭 => CPU 使用率 80%

load average

有多少人在排队:

平均有 5 个人在窗口前排队/打饭 => load average 约 5

所以可能出现几种情况:

情况CPU 使用率load average说明
窗口一直忙,但队伍不长中等CPU 忙,但还扛得住
窗口不忙,但很多人卡在等菜可能是 I/O 阻塞
窗口忙,队伍也很长CPU 资源紧张
窗口不忙,队伍也没人系统很空闲

6. load 怎么判断高不高

关键看CPU 核数

因为 load 是任务数量,不是百分比。

6.1 单核机器

如果是 1 核 CPU:

load = 1.0

大概表示:

刚好一个任务持续占满 CPU

如果:

load = 2.0

表示:

平均有 2 个任务需要 CPU / 资源 1 个在跑,1 个在等

单核下可以粗略理解:

load状态
< 1资源有余量
≈ 1基本打满
> 1有排队
>> 1压力明显

6.2 四核机器

如果是 4 核 CPU:

load = 4.0

才大致表示 CPU 刚好满载。

load = 2.0

对 4 核来说不算高,因为 4 个核心能同时处理 4 个任务。

四核下粗略看:

load状态
< 4大体有余量
≈ 4接近满载
> 4开始排队
>> 4压力明显

所以判断公式可以先记:

load / CPU 核数

例如:

4 核机器 load = 2 => 2 / 4 = 50% => 大体还可以
4 核机器 load = 8 => 8 / 4 = 200% => 平均任务数是核心数的 2 倍,可能排队严重

7. 1 分钟、5 分钟、15 分钟怎么看趋势

/proc/loadavg前三列:

0.45 0.12 0.04

表示:

1分钟 load = 0.45 5分钟 load = 0.12 15分钟 load = 0.04

看趋势:

7.1 1 分钟 > 5 分钟 > 15 分钟

例如:

5.0 2.0 1.0

说明:

最近压力正在升高

可能是刚来了流量、刚开始压测、某个任务突然跑起来。


7.2 1 分钟 < 5 分钟 < 15 分钟

例如:

1.0 2.0 5.0

说明:

压力正在下降

可能刚才高峰过去了。


7.3 三个值都高

例如 4 核机器:

8.0 7.5 7.2

说明:

系统长期处于高负载

这比短暂 1 分钟高更危险。


8. load 高可能是什么原因

不要看到 load 高就说 CPU 高。

load 高常见有三种原因。

8.1 CPU 计算压力大

现象:

load 高 CPU 使用率也高 iowait 不高

说明:

大量任务在抢 CPU

例如:

死循环 大量计算任务 压测 QPS 太高 线程池过大

8.2 I/O 阻塞严重

现象:

load 高 CPU 使用率不高 iowait 高 procs_blocked 高

说明:

很多任务不是在用 CPU,而是卡在磁盘 / 网络存储 / 块设备 I/O

这就是为什么/proc/stat/proc/loadavg要一起看。


8.3 线程/进程过多

现象:

load 高 上下文切换 ctxt 增长快 procs_running 高

说明:

调度压力大,任务太多,CPU 时间片被频繁切换

这时候可能不是单个任务慢,而是系统被大量线程拖垮。


9. 和/proc/stat怎么配合看

你可以按这个诊断表来理解。

/proc/loadavg/proc/statCPU 使用率iowait判断
CPU 计算压力大
低/中I/O 阻塞,磁盘或存储慢
可能线程多、上下文切换多
CPU 有任务但没有明显排队
系统空闲

关键结论:

/proc/stat告诉你 CPU 时间花在哪;/proc/loadavg告诉你系统有没有任务积压。


10. 和procs_running / procs_blocked的关系

上一节/proc/stat里有两个字段:

procs_running procs_blocked

文章也写到,procs_running是当前运行队列任务数,procs_blocked是当前阻塞任务数。

这两个可以辅助解释 load:

字段含义
procs_running当前正在运行或等待 CPU 的任务数量
procs_blocked当前阻塞等待 I/O 的任务数量

如果:

load 高 procs_running 高

偏 CPU 调度压力。

如果:

load 高 procs_blocked 高

偏 I/O 阻塞压力。


11. 放到你的性能监控项目里

你的项目里 Worker 会采集 CPU、内存、磁盘、网络、软中断等指标。其中 CPU Load 可以优先从内核模块 +mmap读取,失败后 fallback 到/proc/loadavg;这体现了项目里“字符设备/mmap + procfs 双路径”的设计。

项目数据流可以这样理解:

Worker 读取 /proc/loadavg ↓ 解析 1min / 5min / 15min load ↓ MetricCollector 聚合到 MonitorInfo ↓ MonitorPusher 通过 gRPC Push 到 Manager ↓ HostManager 把 load 作为健康评分的一部分 ↓ MySQL 落库,QueryService 后续查询趋势

项目源里也强调,Worker 不是每个指标单独发 RPC,而是一轮采样统一聚合成一个MonitorInfo再发;低频指标包括/proc/loadavg/proc/meminfo/proc/diskstats


12. 面试官最可能追问

12.1 load average 和 CPU 使用率有什么区别?

标准答法:

CPU 使用率表示 CPU 在采样时间内忙碌的比例,通常通过/proc/stat两次采样差分计算。load average 表示一段时间内系统中处于可运行状态或不可中断睡眠状态的任务平均数量,它不是百分比。CPU 使用率高说明 CPU 忙,load 高说明任务有积压。load 高可能是 CPU 忙,也可能是大量任务卡在 I/O 上。

项目分析资料里也明确提醒:load average 反映可运行队列和不可中断睡眠任务数量,不等于 CPU 百分比,I/O 阻塞也可能拉高 load。


12.2 load 是不是越低越好?

不是绝对。

如果一台 8 核机器:

load = 3

很正常,说明资源还有余量。

如果一台 1 核机器:

load = 3

就很危险,说明平均 3 个任务竞争 1 个核心或等待资源。

所以必须结合:

CPU 核数 CPU 使用率 iowait procs_running procs_blocked

12.3 为什么 CPU 使用率低,但 load 很高?

常见原因是 I/O 阻塞。

例如:

大量请求访问磁盘 磁盘响应很慢 进程进入不可中断睡眠 D 状态 CPU 没有满载 但 load 被这些 D 状态任务拉高

所以:

CPU 低 + load 高 + iowait 高 => 优先怀疑磁盘 / 存储 / I/O 问题

13. 小白最小记忆版

你背这几句:

/proc/loadavg 看的是系统负载,不是 CPU 使用率。 前三个数分别是 1分钟、5分钟、15分钟平均负载。 load 表示平均有多少任务正在运行或等待资源。 判断 load 高不高,要除以 CPU 核数。 CPU 使用率高表示 CPU 忙;load 高表示任务有积压。 CPU 低但 load 高,通常要怀疑 I/O 阻塞。

14. 面试版一句话

/proc/loadavg记录系统 1 分钟、5 分钟、15 分钟的平均负载。它不是 CPU 使用率,而是系统中处于可运行状态或不可中断睡眠状态的任务平均数量。判断 load 是否异常要结合 CPU 核数、CPU 使用率、iowait、procs_running 和 procs_blocked。如果 CPU 使用率低但 load 很高,通常说明大量任务卡在 I/O 等待上。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 12:20:50

O-RAN中基于Transformer-ESN混合架构的KPI降维与预测优化

1. 项目背景与核心挑战 在6G和下一代网络架构演进中&#xff0c;开放无线接入网(O-RAN)通过解耦式架构和标准化接口&#xff0c;正在重塑无线通信网络的构建方式。这种架构将传统基带单元(BBU)拆分为分布式单元(DU)和集中式单元(CU)&#xff0c;并引入RAN智能控制器(RIC)实现灵…

作者头像 李华
网站建设 2026/6/24 12:16:09

基于Hadoop的番茄小说阅读量数据的分析与运用

摘要 在数字化时代&#xff0c;数据的分析与挖掘为各类行业带来了深远的影响&#xff0c;尤其是在小说阅读平台中&#xff0c;用户行为数据的分析显得尤为重要。番茄小说作为一个快速发展的在线阅读平台&#xff0c;其用户的阅读量数据蕴含着丰富的信息。通过Hadoop这一大数据处…

作者头像 李华
网站建设 2026/6/24 12:13:50

AI开发可观测性实践:构建成本追踪与代码质量监控体系

1. 项目概述&#xff1a;为什么AI开发需要“可观测性”&#xff1f; 最近几年&#xff0c;AI应用开发的热度有目共睹&#xff0c;从大模型API调用到Agent智能体编排&#xff0c;技术栈日新月异。但不知道你有没有发现一个现象&#xff1a;项目初期&#xff0c;大家热情高涨&…

作者头像 李华
网站建设 2026/6/24 12:13:30

基于深度强化学习的多目标SAR无人机智能路径规划实战解析

1. 项目缘起&#xff1a;当SAR任务遇上复杂地形与多目标去年参与一个山区应急测绘项目时&#xff0c;我们遇到了一个典型的“多目标”难题。任务很简单&#xff1a;用搭载合成孔径雷达&#xff08;SAR&#xff09;的无人机&#xff0c;在最短时间内&#xff0c;对一片因山体滑坡…

作者头像 李华
网站建设 2026/6/24 12:01:22

OASIS框架:基于分层事件记忆的长视频流式理解技术解析

1. 从“看热闹”到“看门道”&#xff1a;长视频理解的现实困境 我们每天都在刷短视频&#xff0c;但真正考验AI“眼力”的&#xff0c;其实是那些动辄几十分钟甚至数小时的 长视频 。想象一下&#xff0c;让一个AI去分析一部完整的电影、一场体育比赛录像&#xff0c;或者一…

作者头像 李华
网站建设 2026/6/24 11:58:31

基于视觉语言与扩散模型的自动驾驶场景生成技术解析

1. 项目概述&#xff1a;当自动驾驶研发遇上“一句话生成场景” 最近在自动驾驶仿真测试的圈子里&#xff0c;一个词被频繁提及&#xff1a; ScenarioControl 。这可不是什么新的控制算法&#xff0c;而是一个能让你用“人话”来生成复杂驾驶场景的模型。简单来说&#xff0c…

作者头像 李华