记一次性内存变卦惹起的NFS缺点

最近由于一些要素,做主机资源调整,其中一台主机是做NFS服务,经过NFS挂载到其余几台主机做共享,主机内存从8G调整到了4G,其余不变

降配成功后,重启主机,看着一切反常,就没管了

第二天DBA和我说数据备份没写入,登录主机检查,df -H命令卡住,凭阅历,NFS挂了

登录NFS主机,检查NFS服务反常,检查message日志,发现少量关于RPC的日志

日志报错,分片太大

为什么之前是好的,降内存后,就出现分片太大,不可处置的状况?

经过查找NFS源码,发现如下一段:

*supportamegabyte

原来,NFS主机在选择自动的最大读写块大小时会思考内存的占用状况,每个NFS内核线程最多只经常使用1/4096的物理内存大小,关于UDP来说,由于一个UDP包最大才64KB,因此经常使用UDP协定的NFS读写块大小最大不超越48KB,而kernel中则间接限度为32KB了,而经常使用TCP协定的NFS由于没有这个限度,准许更大的读写块大小,单Linuxkernel还是将其限度为1MB了,关于物理内存超越4GB的机器才经常使用最大的1MB读写块大小,而记载这个大小的文件为/proc/fs/nfsd/max_block_size

检查服务端该值大小为512KB

由于读写对应的是rsize和wsize,是客户端和服务端协商选择的,所以经过命令

检查此时客户端的rsize和wsize

客户端rsize和wsize都是1048567,正好是1M

而上方咱们看到服务端是512K,所以两头目前是不协商的

猜想要素如下:NFS主机内存降配前,原先8G内存,大于4G,所以max_block_size应该是最大值1M,也就是1048567,和客户端协商后,两头都定位自动的1048567

当NFS主机降配到4G后,由于内存包全及计算,NFS服务端max_block_size降为512KB,也就是524288,此时服务端和客户端不婚配

而客户端没有从新衔接服务端,造成未协商,所以客户端分片的数据包,远大于服务端能处置的数据包,也就出现了message中的报错,RPC数据分片太大

知道疑问要素,就开局处置,处置方法分两种

我这里选用了第二种打算,间接修正服务端max_block_size,由于是/proc数据,nfs在启动占用,所以须要停掉nfs修正

修正成功后,从新启动NFS

检查message,日志反常,检查客户端,df -H可以反常看到挂载目录,进入挂载目录反常

这里我为什么不用第一种打算?

由于此时NFS服务端是挂掉的,客户端不可卸载,卸载会揭示占用不可卸载,能卸载的形式是两头都重启,从新后从新启动协商,我不情愿重启客户端主机,所以选用第二种形式

成功后检查nfs传输

可以看到,传输反常,另外可以看到NFS此时是TCP协定的,也就验证了TCP协定传输时,Linux内核最大限度1M块大小了

您可能还会对下面的文章感兴趣: