背景:一个奇怪的问题,本地 NFS Server 系统里面,NFSv4 callback 状态为 D
,并且存在 mount nfs 的进程 D
状态,重启 nfs server 进程之后,其他 client 能正常 mount nfs ,但 nfs server 一直无法在本地挂载,只能重启服务器才能恢复正常
初步日志检查:重启前,nfs server 本地挂载会堵塞在 nfs4_try_mount 这一步;重启服务器之后,挂载日志能看到 nfs4_try_mount 之后就开始 get client cookie 以及之后的操作,并且挂载正常
目的:打算模拟将 NFSv4 callback 进程设置为 D 状态,然后重启 nfs server 进程,看是否能复现上面情况
已测试的无效操作,下面操作有单独操作,也有组合操作过:
待解决:是否有其他方案能定位原因?
1
alvinbone88 337 天前 1
关于 D 状态: https://stackoverflow.com/questions/223644/what-is-an-uninterruptible-process
strace 、 GDB 之类底层用的是 ptrace 信号,对于这种情况完全没用 要定位原因的话,应该自行编译 debug 版内核调试 https://www.kernel.org/doc/html/latest/dev-tools/gdb-kernel-debugging.html |
2
LGA1150 337 天前 via Android 1
显示 D 状态进程的调用栈:
echo w > /proc/sysrq-trigger |