基礎環境信息:html
[root@m01 /]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@m01 /]# uname -r 2.6.32-573.el6.x86_64 [root@m01 /]#
默認掛載屬性爲:bash
[root@m01 /]# showmount -e nfs01 Export list for nfs01: /data 172.16.1.0/24 [root@m01 /]# mount -t nfs nfs01:/data /mnt [root@m01 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.9G 1.8G 4.7G 28% / tmpfs 238M 4.0K 238M 1% /dev/shm /dev/sda1 190M 36M 145M 20% /boot nfs01:/data 6.9G 1.7G 4.8G 27% /mnt [root@m01 /]# grep mnt /proc/mounts nfs01:/data/ /mnt nfs4 rw,sync,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.61,minorversion=0,local_lock=none,addr=172.16.1.31 0 0 [root@m01 /]# ##tcp協議默認的rszie和wsize爲65536
修改rsize和wsize:服務器
[root@m01 nfsd]# umount /mnt [root@m01 nfsd]# mount -t nfs -o rsize=131072,wsize=131072 nfs01:/data /mnt [root@m01 nfsd]# grep mnt /proc/mounts nfs01:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.61,minorversion=0,local_lock=none,addr=172.16.1.31 0 0 [root@m01 nfsd]# ##能夠看到修改後並無生效
使用tcpdump命令抓包查看過程:tcp
[root@nfs01 ~]# tcpdump -nn -i eth1 -w wireshark.cap -s 0
使用wireshark對包進行分析ide
發現rsize和wsize是和服務端協商,並由服務端答覆而來的(NFS V4 compound reply包)。
spa
查閱相關資料得知:NFS 服務器在決定默認的最大讀寫塊大小時考慮到內存佔用狀況,每一個 NFS 內核線程最多隻使用 1/4096 的物理內存大小,對於 UDP 來講,因爲一個 UDP 包最大才 64KB,所以使用 UDP 協議的 NFS 讀寫塊大小最大不超過 48KB,而 kernel 中則直接限制爲 32KB 了;而使用 TCP 協議的 NFS 因爲沒有這個限制容許更大的讀寫塊大小,但 Linux kernel 仍是將其限制爲 1MB 了。對於物理內存超過 4GB 的機器才使用最大的 1MB 讀寫塊大小。記錄這個大小的文件爲/proc/fs/nfsd/max_block_size.線程
查看服務端該文件的大小:htm
[root@nfs01 ~]# cat /proc/fs/nfsd/max_block_size 65536 [root@nfs01 ~]#
找到問題的所在了!而後我作了以下的修改blog
一、中止nfs服務圖片
[root@nfs01 ~]# /etc/init.d/nfs stop Shutting down NFS daemon: [ OK ] Shutting down NFS mountd: [ OK ] Shutting down NFS quotas: [ OK ] Shutting down NFS services: [ OK ] Shutting down RPC idmapd: [ OK ] [root@nfs01 ~]#
二、修改max_block_size
[root@nfs01 ~]# echo 1048576 > /proc/fs/nfsd/max_block_size [root@nfs01 ~]# cat /proc/fs/nfsd/max_block_size 1048576 [root@nfs01 ~]# ##直接改成最大1M。
三、啓動nfs服務
[root@nfs01 ~]# /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ] [root@nfs01 ~]#
四、客戶端進行掛載
[root@m01 nfsd]# mount -t nfs -o rsize=131072,wsize=131072 nfs01:/data /mnt [root@m01 nfsd]# grep mnt /proc/mounts nfs01:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.61,minorversion=0,local_lock=none,addr=172.16.1.31 0 0 [root@m01 nfsd]# ##修改爲功!
問題解決!