Linux怎么查看具体的进程由于等待磁盘IO而进入不可中断状态详情

煙雲

煙雲

2026-07-08

1007人浏览

原创

ps中stat为d表示进程处于不可中断睡眠态,正等待磁盘或nfs io;需结合iotop -o查看实时io活动、/proc/pid/io验证read_bytes/write_bytes是否增长,并用iostat -x和dmesg交叉分析底层瓶颈,以区分健康等待与驱动/硬件卡死。

linux怎么查看具体的进程由于等待磁盘io而进入不可中断状态详情

直接看 psSTAT 列是 D 就说明进程卡在不可中断等待,但仅凭这个无法判断它到底在等什么、等了多久、有没有真实 IO 流量。得组合多个工具交叉验证,否则容易把驱动卡死当成正常等待。

用 ps 找出所有 D 状态进程并过滤关键字段

单纯 ps aux 输出太杂,要聚焦真正可疑的进程:

  • ps -eo pid,comm,state,pcpu,pmem,wchan,etimes --sort=-etimes | awk '$3 ~ /^D$/ {print}':按调度延迟 etimes 降序,只留 STATE 是 D 的行;wchan 显示内核等待函数名(如 wait_event__nvme_submit_cmd),比状态码更有指向性
  • 避免用 grep ' D ',因为 comm 名里带空格或 D 字母会误匹配;必须用 $3 ~ /^D$/ 精确匹配第三列
  • 如果 wchan- 或空,说明进程已脱离调度器上下文,大概率卡在驱动或硬件层,不是应用层 IO

用 iotop 确认该进程是否真有磁盘读写行为

iotop 能看到实时 IO 量,但默认不显示纯等待无流量的进程:

PyCharm 2026.2.0.1 Linux版
PyCharm 2026.2.0.1 Linux版

PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。

下载
  • -o 参数:sudo iotop -o —— 只显示当前有 IO 活动的进程,含刚发起请求还没返回的(即正在等响应的 D 进程)
  • -a 参数:sudo iotop -a —— 累计模式,适合查长期 IO 倾向;但注意它不反映当前阻塞状态,只看总量
  • 若某进程在 ps 中是 D,但在 iotop -o 里完全不出现,且 /proc/PID/ioread_bytes/write_bytes 长时间不动,基本可判定不是磁盘 IO,而是驱动/硬件卡死或 NFS 挂起

检查 /proc/PID/io 判断 IO 是否真实发生

/proc/PID/io 是最硬的证据,它记录实际落盘字节数,绕过缓存和内核中间层:

  • 关注三行:read_byteswrite_bytescancelled_write_bytes
  • 如果 read_byteswrite_bytes 在几秒内无增长,而进程仍是 D 状态,说明请求没发出去或设备没响应 —— 不是“等 IO”,而是“被 IO 卡住”
  • cancelled_write_bytes 持续升高,往往意味着脏页反复刷盘失败(如 ext4 journal full、NFS server unreachable),此时 wchan 常为 ext4_da_writepagesnfs_wait_bit_killable

结合 iostat 和 dmesg 定位底层瓶颈

单看进程不够,得确认是不是整个设备拖慢了:

  • iostat -x 1%utilawait%util 接近 100% 且 await > 50ms 时,才说明磁盘真忙;若 %util 很低但仍有大量 D 进程,问题不在磁盘本身
  • dmesg -T | tail -30 查硬件级报错:end_request: I/O errorNVMe timeoutataX.00: failed command 这类日志一出现,基本可锁定是磁盘或控制器故障
  • 对 NFS 挂载点,执行 ls /mnt/nfs 若卡住,再跑 showmount -e server,能快速区分是网络中断还是服务端宕机

最难的是区分“健康等待”和“卡死”。前者 read_bytes 缓慢但持续增长,await 波动但可控;后者 read_bytes 冻结、wchan 停在驱动函数、dmesg 有 timeout。这时候杀进程没用,得换磁盘、重启 NFS 客户端,或者升级对应驱动。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux linux io性能分析

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

2646

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

1623

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

1269

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

2588

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

2349

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

1613

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

1205

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

1376

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

208

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Apifox下载与安装手册
Apifox下载与安装手册

共0课时 | 0人学习

安装 Xdebug 并配置 phpstorm
安装 Xdebug 并配置 phpstorm

共1课时 | 125人学习