过滤 ps axu 中 STAT 处于 'D' 的进程
High Load - Low IO - Low CPU
从ps axu
中获取状态(STAT)为 D(uninterruptible sleep) 的进程
Why?
一次遇到高 load, 低 cpu, 低 io 的服务器情况. 后来发现是有进程处于 D(uninterruptible sleep) 状态导致的. 在 4C8G 的服务器上, load average 可高达 100+, 但其他程序的运行并没有被影响.
1 | man ps |
command
下面是获取 STAT/S/stat 中带有 D 的进程.1
ps aux | awk 'NR==1{for (i=1;i<=NF;i++){ if ($i=="STAT" || $i=="S" || $i=="stat") { k=i;} }} $k ~ /D/ {print $0}'
And why?
简单来说是进程处于 syscall, 是一种无法终端的操作, 如 mkdir
操作. 在 NFS 文件系统上操作可能会出现的情况. 另外该状态的进程无法被 strace
…至于我遇到的进程, 是 node-exporter/ls/bash 处于了 D.
Reference
High Load - Low IO - Low CPU usageman ps
uninterruptible-sleep
原文作者: Pike.SZ.fish
原文链接: https://page.pikeszfish.me/2017/07/14/get-process-whose-stat-is-D/
许可协议: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可