真实面经题目 · 原创解析
怎么查看OS的负载?
查看 OS 负载不能只报一个命令,要说明 Linux load average 的含义、采集入口、判断标准和定位路径。核心是先用 uptime、top、w 或 /proc/loadavg 看 1/5/15 分钟平均负载,再结合 CPU 核数、运行队列、不可中断任务、IO 等待、上下文切换和进程级指标判断是 CPU 饱和、IO 阻塞还是调度压力。
真实面经题目 · 原创解析
查看 OS 负载不能只报一个命令,要说明 Linux load average 的含义、采集入口、判断标准和定位路径。核心是先用 uptime、top、w 或 /proc/loadavg 看 1/5/15 分钟平均负载,再结合 CPU 核数、运行队列、不可中断任务、IO 等待、上下文切换和进程级指标判断是 CPU 饱和、IO 阻塞还是调度压力。
可以先用 uptime、top 或 w 查看 load average,它们会给出 1 分钟、5 分钟、15 分钟的平均负载;也可以直接读取 /proc/loadavg 获取原始数据。Linux 的 load average 不是 CPU 使用率,而是处于可运行状态以及不可中断睡眠状态的任务平均数量,所以高负载可能来自 CPU 计算排队,也可能来自磁盘、网络存储等 IO 等待。判断时要先看机器有多少 CPU 核,比如 8 核机器负载长期接近或超过 8 才说明任务队列比较紧张;如果 CPU 使用率不高但 load 很高,通常要重点查 D 状态任务和 IO。定位时可以用 vmstat 看 r、b、wa、cs、in,用 mpstat 看各 CPU 是否打满或不均衡,用 iostat 看磁盘 util、await、队列情况,用 pidstat 看具体进程的 CPU、IO 和上下文切换,用 sar 回看历史趋势,最后结合 top、ps 或线程视角找到具体进程和调用链。
最直接的入口是 uptime、top 和 w,这几个命令都会显示 load average,通常包含最近 1 分钟、5 分钟、15 分钟三个值。回答时不要只说命令名,还要解释这三个值用于观察短期突增、中期持续压力和长期趋势。如果 1 分钟明显高于 15 分钟,说明压力可能刚刚上来;如果三个值都很高,说明负载已经持续了一段时间。
Linux load average 表示一段时间内平均有多少任务处于可运行状态或不可中断睡眠状态。可运行状态通常意味着正在使用 CPU 或等待 CPU 调度;不可中断睡眠通常和 IO、内核等待、存储阻塞有关。因此 load 高不等价于 CPU 使用率高,它衡量的是系统中等待被处理的任务压力,而不是单纯的 CPU 忙碌百分比。
负载值必须结合 CPU 核数解释,否则容易误判。单核机器 load 为 4 通常说明队列很拥挤;8 核机器 load 为 4 可能还比较正常。常见判断方式是先用 nproc、lscpu 或查看 /proc/cpuinfo 得到逻辑 CPU 数,再把 load average 与核数比较。长期超过核数通常代表任务排队明显,长期远超核数则需要进一步定位瓶颈。
CPU 使用率和 load 的区别是回答重点。CPU 使用率高且 load 高,往往是计算型任务太多,运行队列过长;CPU 使用率不高但 load 很高,则可能有大量任务处于不可中断状态,比如磁盘慢、网络盘阻塞、数据库 IO 卡住。定位时要同时看 us、sy、id、wa,以及进程状态中的 R 和 D,避免把所有高负载都归因于 CPU 不够。
vmstat 适合做快速初筛,可以持续观察 r、b、us、sy、id、wa、cs、in 等字段。r 表示等待 CPU 的运行队列长度,长期大于 CPU 核数说明 CPU 调度压力大;b 表示阻塞任务数量,偏高时要怀疑 IO 或内核等待;wa 高说明 CPU 有较多时间在等待 IO;cs 和 in 很高则可能存在频繁上下文切换或中断压力。
mpstat 可以查看整体和每个 CPU 的使用情况,判断是否所有核都忙,还是个别核被打满。iostat 用来观察磁盘层面的 util、await、读写吞吐和队列等待,适合判断 IO 是否成为瓶颈。pidstat 可以按进程或线程查看 CPU、磁盘 IO、上下文切换等指标,帮助把系统级高负载收敛到具体进程,而不是停留在平均值层面。
sar 适合排查已经发生过的负载问题,可以回看 CPU、队列、磁盘、上下文切换等历史指标,判断高负载是瞬时抖动还是周期性问题。/proc/loadavg 则提供内核暴露的负载原始信息,除了前三个平均负载值,还能看到运行任务数量和进程相关计数。生产排查时通常会把实时命令、历史数据和进程级证据结合起来看。
这种情况通常要怀疑不可中断睡眠任务较多,也就是大量任务卡在 IO、存储、网络文件系统或内核等待上。可以看 top 中 D 状态任务,结合 vmstat 的 b 和 wa、iostat 的 await 和 util,再用 pidstat -d 找到具体产生 IO 等待的进程。
先确认逻辑 CPU 核数,然后把 load average 和核数比较。比如 8 核机器长期 load 接近 8 表示资源基本被占满,持续超过 8 表示任务开始排队。如果同时响应变慢、r 队列变长或 IO 等待升高,就可以认为负载已经影响服务质量。
重点看 r、b、us、sy、id、wa、cs、in。r 长期偏高说明等待 CPU 的任务多,b 偏高说明阻塞任务多,wa 高说明 IO 等待明显,cs 和 in 很高可能说明上下文切换或中断频繁。它适合先判断问题大方向。
mpstat 用于确认 CPU 总体和各核是否繁忙或不均衡;iostat 用于判断磁盘吞吐、等待时间和设备利用率是否异常;pidstat 用于把 CPU、IO、上下文切换等压力对应到具体进程或线程。三者组合能从系统层定位到责任进程。
三个窗口可以区分瞬时抖动和持续压力。1 分钟高但 15 分钟低,通常表示刚出现的突发;1、5、15 分钟都高,说明问题持续存在;如果 1 分钟开始下降而 15 分钟仍高,说明压力可能已经缓解但历史窗口还没完全反映出来。