nfs问题导致df挂起
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nfs问题导致df挂起相关的知识,希望对你有一定的参考价值。
参考技术A模拟nfs服务端问题导致nfs客户端的进行hand死,具体表现为调用 df 命令或者涉及访问该目录的命令时界面会hang住,如果大量后台进行调用访问该目录会导致 uptime 下的负载检查,而实际所有的sar检查都没有发现任何性能问题。
为了重现环境,需要在准备一台服务器(既做客户端也做服务端)
修改/etc/exports配置文件,将新创建的共享目录写入文件,并以读写模式进行共享。
所有环境都准完毕,目录已经挂载,下一步进行nfs服务端的停止操作
将nfs server进程停止,模拟NFS服务端故障导致客户端挂起,此时 df 命令无法正常运行。
首先系统的表现为观察uptime的负载非常高,单个CPU的服务器一分钟负载去到17,表明多个进程在系统运行队列中.
uptime : System load averages is the average number of processes that are either in a runnable or uninterruptable state.
如下:
检查sar情况可以证明大部分进程在等待运行:
根据最明显的问题根源“ df 操作hang死 ”,通过 strace 去分析 df 命令的系统调用及信号情况,可以明显发现 df 是在系统调用尝试获取目录/var/nfs的stat信息时挂起,如下:
再观察系统的 mount 信息,发现通过nfs挂载以下目录/mnt/nfs
问题基本就在 df 在访问/mnt/nfs信息是hang住,通过 ps aux 抓取系统运行的 df 进程信息(大量 df ,状态为D+(无法中断的休眠状态,后台)),如下:
通过 umount -lf 强制卸载文件系统, df 恢复正常,通过 killall df 将大量的残余df进程中止后系统负载下降。
一个NFS缓存管理包的bug导致文件系统满的问题和解决方法
这几天安装CentOS 6的虚拟机总是提示文件系统满,一开始以为是最近oracle经常操作大数据量提交导致undo tbs无限扩大,后来发现原来是NFS缓存管理包cachefilesd的问题。分享一下:
由于是测试虚拟机,文件系统懒得专门规划,只划分了一个根目录分区。(各位admin切记不要犯这种实际生产环境的大忌):
[[email protected]* /]df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_*-lv_root 54G 54G 0G 100% / tmpfs 3.9G 604M 3.3G 16% /dev/shm /dev/sda1 485M 32M 428M 7% /boot /dev/mapper/vg_*-lv_home 5.5G 478M 4.8G 9% /home
查找大于1g的文件,看有没有什么文件可以先删除:
[[email protected]* /]find -size +1G ./var/log/messages ./var/log/messages-20170109 ------output omitted------
/var/log/messages和带日期后缀的日志有问题,怎么会这么大?取文件后100行看看:
[[email protected]* log]tail -100 messages Jan 16 16:29:42 * cachefilesd[1226]: Scan complete Jan 16 16:29:42 * cachefilesd[1226]: Scan complete Jan 16 16:29:42 * cachefilesd[1226]: Scan complete ------output omitted-------
cachefilesd scan complete是什么鬼?找大侠问度娘:
http://blog.itpub.net/17203031/viewspace-1130002/
“Cachefilesd进程是负责进行网络文件系统的文件和目录缓存管理的,比如AFS和NFS这类网络文件系统,需要在本地系统中存在一个Cache对象。这个问题是由于cachefilesd服务自身的bug造成的,由于内部设置了错误的日志级别(log level)。所以每次cachefilesd在工作进行Scan的时候,都会写入到/var/log/messages日志文件里面。”
详细信息请点击上述链接查阅。
明白了,反正是虚拟机,上面没跑NFS,内网升级太麻烦,索性关了吧:
[[email protected]* log]service cachefilesd stop [[email protected]* log]chkconfig cachefilesd --level 35 off
最后,把非cachefilesd日志保存起来,清理源文件:
[[email protected]* log]grep -v cachefilesd messages-20170109 > messages.bak [[email protected]* log]grep -v cachefilesd messages >> messages.bak [[email protected]* log]rm -f messages-20170109 [[email protected]* log]echo > messages
最后再查看一下messages还有没有
cachefilesd[1226]: Scan complete
的日志,没有的话大功告成。
总结:1、业务文件系统必须和操作系统文件系统分离!2、定期检查并清理messages 。
本文出自 “苦瓜” 博客,请务必保留此出处http://golehuang.blog.51cto.com/7499/1892334
以上是关于nfs问题导致df挂起的主要内容,如果未能解决你的问题,请参考以下文章