首页/系统/信创系统运维速查/D 状态进程(不可中断睡眠)排查
常见问题65 条

D 状态进程(不可中断睡眠)排查

D 状态进程多卡在磁盘或网络存储 IO:看内核调用点与存储层日志,按链路处理,kill -9 对它无效。

信创系统运维速查系统更新于 2026-10-13

D 状态是什么意思

D 状态(不可中断睡眠)意味着进程正卡在内核里等待某件事完成,最常见的是磁盘或网络存储 IO。它与普通睡眠(S)的区别在于:处于 D 状态的进程连信号都不响应,kill -9 也杀不掉,必须等底层操作返回或超时。因此排查方向不在进程本身,而在它等待的存储与驱动链路。

基本信息

状态标识ps 输出 STAT 列为 D
等待点查看cat /proc/<PID>/wchan、/proc/<PID>/stack(需 root)
常见源头本地磁盘故障、网络存储断链、存储驱动或固件问题
信号特性kill -9 对 D 状态无效
权限要求root 查看内核调用栈

典型使用场景

  • 系统负载极高但 CPU 使用率不高,怀疑有进程卡在 IO
  • 应用无响应,进程处于 D 状态长时间不退出
  • 网络存储(NFS、iSCSI)异常后系统整体变慢
  • 重启过程反复卡住并伴随 hung task 告警
  • 存储扩容或链路变更后的稳定性确认

定位等待点

定位等待点
ps -eo pid,stat,wchan:24,cmd | awk '$2 ~ /D/' | head    # 列出 D 状态进程与等待点
cat /proc/<PID>/wchan                                    # 内核等待函数名
cat /proc/<PID>/stack 2>/dev/null | head                 # 内核调用栈(需 root)
cat /proc/<PID>/status | grep -E 'State|VmRSS'           # 状态与内存占用
dmesg -T | grep -iE 'blocked for more than|hung task|I/O error' | tail
iostat -x 1 3                                            # 对应磁盘的 IO 指标
mount | grep <挂载点>                                     # 确认是否为网络存储

等待点与指向

等待点或告警含义处理方向
wchan 指向文件系统或块层等待磁盘与存储 IO查磁盘健康与存储链路
wchan 指向网络文件系统等待远端存储响应查网络与存储服务端
dmesg 出现 hung task任务长时间未返回按存储链路故障处理
iostat 中 %util 接近 100设备长期满负荷定位热点并评估扩容
D 状态进程不可 kill:必须等底层恢复(网络存储重连、存储侧处理完成);盲目重启可能让故障面扩大,共享存储场景尤其明显。
要区分「偶发短暂 D」与「长时间 D」:大量进程短时间内进入 D 又退出,通常是 IO 抖动;持续数十分钟不结束的 D 状态才是故障信号。

易错点

  • 对 D 状态进程执行 kill -9:信号无效,问题在底层 IO 通路
  • 只看负载数字不看进程状态:负载里包含 D 状态进程,可能是存储问题而不是 CPU 问题
  • 忽略 hung task 告警:这是内核明确的异常信号,应按存储或驱动故障处理
  • 不做存储侧排查就重启主机:网络存储故障会跟着迁移到其他节点
  • 不记录现场(wchan、dmesg 片段)就重启:故障证据丢失,问题大概率还会复现

数据来源与参考

  • man 5 proc
  • man 1 ps
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌