美文网首页
nfs问题导致df挂起

nfs问题导致df挂起

作者: 黄梓荣 | 来源:发表于2018-10-25 23:14 被阅读0次

    准备环境

    模拟nfs服务端问题导致nfs客户端的进行hand死,具体表现为调用df命令或者涉及访问该目录的命令时界面会hang住,如果大量后台进行调用访问该目录会导致uptime下的负载检查,而实际所有的sar检查都没有发现任何性能问题。

    为了重现环境,需要在准备一台服务器(既做客户端也做服务端)

    安装nfs rpm包并启动服务

    [root@vultr ~]# yum install nfs-utils -y
    [root@vultr ~]# systemctl start nfs
    [root@vultr ~]# systemctl start rpcbind
    

    创建nfs服务端共享目录

    [root@vultr ~]# mkdir /var/nfs
    [root@vultr ~]# chmod 755 /var/nfs/
    [root@vultr ~]# chown nfsnobody:nfsnobody /var/nfs/
    

    将目录共享

    修改/etc/exports配置文件,将新创建的共享目录写入文件,并以读写模式进行共享。

    [root@vultr nfs]# cat /etc/exports
    /var/nfs    *(rw,sync)
    [root@vultr ~]# exportfs -a
    

    确认共享情况并挂载

    [root@vultr ~]# showmount -e 149.28.143.23
    Export list for 149.28.143.23:
    /var/nfs *
    [root@vultr ~]# mount -t nfs 149.28.143.23:/var/nfs /mnt/nfs
    [root@vultr ~]# df
    Filesystem             1K-blocks    Used Available Use% Mounted on
    /dev/vda1               25778760 2714472  21737248  12% /
    devtmpfs                  496928       0    496928   0% /dev
    149.28.143.23:/var/nfs  25778816 2714496  21737344  12% /mnt/nfs
    

    所有环境都准完毕,目录已经挂载,下一步进行nfs服务端的停止操作

    实验

    将nfs server进程停止,模拟NFS服务端故障导致客户端挂起,此时df命令无法正常运行。

    [root@vultr nfs]# systemctl stop nfs
    [root@vultr nfs]# df
    此处hang住
    

    首先系统的表现为观察uptime的负载非常高,单个CPU的服务器一分钟负载去到17,表明多个进程在系统运行队列中.

    uptime: System load averages is the average number of processes that are either in a runnable or uninterruptable state.

    如下:


    df_hand_uptime.png

    检查sar情况可以证明大部分进程在等待运行:

    • sar -u 观察CPU情况

      cpu使用率非常低,大部分为idle,说明没有进程在等待cpu资源。


      df_hand_sar_u.png
    • sar -d 观察磁盘情况 磁盘dev253-0的tps几乎为0,说明没有什么进程时等待磁盘。


      df_hand_sar_d.png
    • sar -b 观察IO情况 IO设备的读写tps都几乎为0,瓶颈明显不足IO设备


    • sar -W 观察换页情况 当时几乎没有进行换页操作


      df_hand_sar_W.png
    • sar -q 观察队列情况 队列情况初步指出问题所在,大量队列堆积在任务列表中未执行,继续考虑进程问题。


    根据最明显的问题根源“df操作hang死”,通过strace去分析df命令的系统调用及信号情况,可以明显发现df是在系统调用尝试获取目录/var/nfs的stat信息时挂起,如下:

    df_hand_strace.png

    再观察系统的mount信息,发现通过nfs挂载以下目录/mnt/nfs

    df_hand_mount.png

    问题基本就在df在访问/mnt/nfs信息是hang住,通过ps aux抓取系统运行的df进程信息(大量df,状态为D+(无法中断的休眠状态,后台)),如下:

    [root@vultr ~]# ps aux | grep df | wc -l
    202
    [root@vultr ~]# ps aux | grep -w df | head -5
    root      2793  0.0  0.1 108020   760 pts/0    D+   14:38   0:00 df
    root      2794  0.0  0.1 108020   764 pts/0    D+   14:38   0:00 df
    root      2795  0.0  0.1 108020   760 pts/0    D+   14:38   0:00 df
    root      2796  0.0  0.1 108020   760 pts/0    D+   14:38   0:00 df
    root      2797  0.0  0.1 108020   764 pts/0    D+   14:38   0:00 df
    

    通过umount -lf强制卸载文件系统,df恢复正常,通过killall df将大量的残余df进程中止后系统负载下降。

    [root@vultr ~]# umount -lf /mnt/nfs
    [root@vultr ~]# umount 
    
    Usage:
     umount [-hV]
     umount -a [options]
     umount [options] <source> | <directory>
    Options:
     -a, --all               unmount all filesystems
     -f, --force             force unmount (in case of an unreachable NFS system)
     -l, --lazy              detach the filesystem now, and cleanup all later
     [root@vultr ~]#
     [root@vultr ~]# df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/vda1       20616252 1595120  17956236   9% /
    devtmpfs          238888       0    238888   0% /dev
    tmpfs             249668       0    249668   0% /dev/shm
    tmpfs             249668    8684    240984   4% /run
    tmpfs             249668       0    249668   0% /sys/fs/cgroup
    tmpfs              49936       0     49936   0% /run/user/0
    [root@vultr ~]#
    [root@vultr ~]# uptime
     14:52:56 up  1:11,  2 users,  load average: 5.68, 84.24, 79.26
    

    相关文章

      网友评论

          本文标题:nfs问题导致df挂起

          本文链接:https://www.haomeiwen.com/subject/crehtqtx.html