sar -q 显示 runq-sz 很大但没有明显 CPU 消耗的隐藏等待

发布时间 - 2026-01-19 00:00:00    点击率:
runq-sz 持续偏高但 %idle 很高,说明进程卡在不可中断睡眠(D 状态)而非 CPU 瓶颈,常见于 I/O 阻塞、内存回收或驱动异常;需用 ps、iostat、dmesg 等交叉定位。

runq-sz 显示的是当前就绪队列中等待被调度执行的进程数(包括正在运行和已就绪但未获得 CPU 的进程)。当 sar -q 输出中 runq-sz 持续偏高(比如 > 10,或明显超过 CPU 核心数),但 sar -u 显示 %idle 很高、%usr/%sys 很低时,说明系统有大量任务在排队,却没怎么用 CPU —— 这通常不是 CPU 真的空闲,而是这些任务被卡在了其他资源上,无法推进。

常见原因:I/O 等待被“隐藏”了

Linux 中,处于不可中断睡眠状态(D 状态)的进程不会计入 CPU 使用率(因为没跑在 CPU 上),但会留在 run queue 中,持续推高 runq-sz。这类进程往往卡在底层 I/O 操作上,例如:

  • 等待慢速磁盘响应(如故障硬盘、RAID 同步、ext4 journal 阻塞)
  • 访问挂载失败或响应极慢的 NFS/CIFS 共享
  • 内核模块 bug 或驱动 hang 住(如某些旧版 NVMe 或 USB 存储驱动)
  • 内存严重不足触发 direct reclaim,而回收过程又阻塞在 I/O(如 swapout 到慢盘)

快速定位 D 状态进程

直接查看当前有哪些进程卡在不可中断状态:

  • ps -eo pid,ppid,stat,comm,wchan --sort=-st

    at | head -20
    —— 关注 STAT 列含 D 的行,wchan 显示其等待的内核函数(如 io_schedulenvme_queue_rq__wait_on_bit
  • ps aux | awk '$8 ~ /D/ {print $0}' —— 简单筛选 D 状态进程
  • cat /proc/[pid]/stack(对任一 D 进程)—— 查看其内核调用栈,确认阻塞点

结合 I/O 和内存指标交叉验证

单独看 runq-sz 容易误判,需同步检查:

  • sar -d 1 5:看 await%util 是否异常高(尤其某设备 util 接近 100% 且 await > 100ms)
  • iostat -x 1 5:关注 r_await/w_awaitavgqu-sz(设备级队列长度),若 avgqu-sz 大但 %util 不高,可能是驱动或队列深度问题
  • free -h + cat /proc/meminfo | grep -E "^(MemAvailable|SwapFree|SReclaimable)":确认是否内存紧张导致频繁 kswapd 或 direct reclaim
  • dmesg -T | tail -50:查找 I/O timeout、ATA/NVMe reset、NFS stale handle 等错误日志

典型场景示例

一台 8 核服务器,sar -q 显示 runq-sz 长期在 30–50,sar -u 显示 %idle > 95%,但用户反馈应用响应慢。执行 ps 发现 20+ 进程 STAT=D,wchan=“nvme_queue_rq”。进一步 iostat -x 显示 nvme0n1 的 await 达 2000ms,%util=99.8%,dmesg 有 “nvme 0000:01:00.0: Device not ready” 报错 —— 基本可判定是 NVMe 盘硬件故障或固件异常,导致所有发往该盘的 I/O 请求挂起,进程集体卡 D 状态,堆积在 run queue 中。


# linux  # 硬盘  # usb  #   # ai  # ios  # print  # sort  #   # bug  # 卡在  # 很高  # 慢速  # 偏高  # 的是  # 一台  # 这类  # 不高  # 报错  # 而非 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 英语简历制作免费网站推荐,如何将简历翻译成英文?  如何快速搭建支持数据库操作的智能建站平台?  Laravel怎么使用artisan命令缓存配置和视图  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在万网自助建站平台快速创建网站?  浅谈javascript alert和confirm的美化  如何在服务器上配置二级域名建站?  网站制作免费,什么网站能看正片电影?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Python进程池调度策略_任务分发说明【指导】  北京专业网站制作设计师招聘,北京白云观官方网站?  网站建设要注意的标准 促进网站用户好感度!  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何用西部建站助手快速创建专业网站?  Laravel distinct去重查询_Laravel Eloquent去重方法  如何在宝塔面板中创建新站点?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  在线教育网站制作平台,山西立德教育官网?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  网站建设整体流程解析,建站其实很容易!  如何用AWS免费套餐快速搭建高效网站?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel怎么实现模型属性的自动加密  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  清除minerd进程的简单方法  如何用狗爹虚拟主机快速搭建网站?  ,在苏州找工作,上哪个网站比较好?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  如何在建站之星网店版论坛获取技术支持?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  JavaScript模板引擎Template.js使用详解  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  如何续费美橙建站之星域名及服务?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  HTML 中如何正确使用模板变量为元素的 name 属性赋值