V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
PyTx
V2EX  ›  Linux

如何将 NFSv4 callback 进程设置为 D 状态

  •  
  •   PyTx · 316 天前 · 1054 次点击
    这是一个创建于 316 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:一个奇怪的问题,本地 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. 停止 nfs server 进程,本地执行大批量 df/mount -t nfs xxxx 的命令
    2. 通过 stress-ng 将本地 cpu 、io 等负载打满,然后再批量 mount
    3. 手动 strace 、gdb 等命令指向 NFSv4 callback 进程,打算手动 sleep ,但提示无法找到对应进程(测试机,root 权限)

    待解决:是否有其他方案能定位原因?

    第 1 条附言  ·  314 天前
    感谢回复,我再想下怎样继续定位,看内核层面怎样弄
    2 条回复    2024-01-16 12:59:42 +08:00
    alvinbone88
        1
    alvinbone88  
       316 天前   ❤️ 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
    LGA1150
        2
    LGA1150  
       316 天前 via Android   ❤️ 1
    显示 D 状态进程的调用栈:
    echo w > /proc/sysrq-trigger
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5389 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 09:29 · PVG 17:29 · LAX 01:29 · JFK 04:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.