D状态进程是处于不可中断睡眠的进程,正与硬件交互(如磁盘读写),内核禁止中断以保障数据一致性,不消耗CPU但计入系统平均负载。

直接在终端运行 top,然后关注进程状态列(S 列)中显示为 D 的进程,它们就是处于不可中断状态(Uninterruptible Sleep)的进程。
识别不可中断状态(D 状态)进程
启动 top 后,默认显示的进程列表中有一列叫 S(Status),它表示进程当前状态。只要看到某行的 S 列值是 D,就说明该进程正处在不可中断状态:
- D 表示进程正在与硬件交互(如磁盘读写、网络设备等待响应),内核不允许中断它,以保证数据一致性
- D 状态进程不消耗 CPU 时间(%CPU 通常很低或为 0),但会被计入系统平均负载
快速筛选和定位 D 进程
top 默认不自动过滤,但可通过交互命令聚焦查看:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 运行
top后按 Shift+F 进入字段排序菜单,选择 S(State)列为排序依据,D 状态会集中排在前列 - 按 o 键可添加过滤条件,输入
S=D即只显示状态为 D 的进程(部分较新版本支持) - 更可靠的方式:退出 top,用
ps -eo pid,user,state,comm,wchan | awk '$3=="D"' | head -20直接列出 D 进程及等待的内核函数(wchan)
结合上下文判断是否异常
单独看到 D 进程不等于故障,需结合其他指标综合分析:
- 看顶部 %wa(I/O wait)值:若持续高于 20%,说明 CPU 在大量等待 I/O,D 进程可能正是原因
- 看 load average:如果 1 分钟负载远高于 CPU 核心数,且有多个 D 进程,大概率存在 I/O 瓶颈
- 检查对应进程的命令名(COMMAND 列)和用户(USER 列):数据库、备份工具、NFS 挂载点操作等常见触发 D 状态
进一步排查建议
确认存在可疑 D 进程后,可继续深入:
- 记下 PID,用
cat /proc/<PID>/stack查看其阻塞在哪个内核函数(需 root 权限) - 用
iostat -x 1观察磁盘 %util 和 await,确认是否存在设备级延迟 - 如果是 NFS 或远程存储,检查网络连通性及服务端状态
- 重启卡住的服务或卸载异常挂载点,通常能释放 D 进程(注意:不能用 kill 杀掉 D 进程)

















