最近,有一台Linux服务器出现了不可控的局面,由于umount磁盘操作的失效,导致相关进程都陷入了D状态里,一般情况下最好的解决办法就是重启大法了。
- 进程陷入D状态无外乎就是因为外部原因造成的,例如等待磁盘的IO、网络的IO……
- 即便你使用kill -9也是无济于事的……因为进程已经陷进去了,无法响应你的SIGKILL。
理所当然的,我果断采取了reboot -f的操作,让人意想不到的是,连reboot自身也陷进去了,失去响应。
- reboot -f的区别在于直接通知init重启信号,而跳过一系列的killall、umount操作
下面这是当时保存的现场画面。
当时的情景如下:
- 使用systemctl关闭docker服务(docker是在vdb上的)
- systemd(init)连带卡死
- 尝试remount vdb卡死
- reboot -f因systemd连带卡死
通过systemctl查看joblist,基本都因为systemd的原因全部处于waiting状态,导致systemd一直处于cpu的消耗状态。
JOB UNIT TYPE STATE
4044 session-295.scope start waiting
3924 session-275.scope start wai