D状态进程 主要是因为延迟 比如
- CPU 延迟
- 内存延迟
- 文件系统延迟
- IO 栈延迟
- 网络栈延迟
- 锁及同步原语竞争
eg: 线上遇到过个问题 ,有人用cgroup 将进程使用cpu 都绑定到了0号core上,导致多核能力没用起来。 于是进程由于处理速度慢,新的处理线程 又不断产生,最终出现了堆积且同类thread handler并发达到1500。 导致load 达到1500+
so 举一反三: 同样的block 问题也会出现在某块盘的io使用,mem紧张,网络io等待,锁竞争等问题
wchan:32 # waitChain 显示hang在哪个函数上
ps -heo state,tid,pid,wchan:32,cmd | awk '{if($1=="R"||$1=="D"){print $0}}'
refer to http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html