NFS再优化

1. 查看
​$ showmount -a

showmount -e
cat /etc/exports

2. 优化读写块大小
默认是4096bit,
测试写性能 time dd if=/dev/zero of=/mnt/nfs1/512mb.dat bs=16k count=32768
测试读性能 time dd if=/mnt/nfs1/512mb.dat of=/dev/null  bs=16k count=32768

改block大小,多测几次,看不同block下的性能
改block大小, 
vi /etc/fstab 

nfs-server-ip:/nfs1 /mnt/nfs1 nfs rsize=8192,wsize=8192 0 0

3.优化MTU
$ tracepath nfsserver/2049
$ ifconfig eth0 mtu 512

4. 改守护进程的NFS数目
看性能
cat /proc/net/nfsd  
改进程数: 
​$ /etc/rc.d/init.d/nfs RPCNFSDCOUNT=16


5. 控制socket 输入队列大小
通常为65535byte (64KB),如果有8个NFS进程,每个只有8KB缓冲区用于存储输入队列的数据
改大小,
echo 262144 >/proc/sys/net/core/rmem_default

echo 262144 >/proc/sys/net/core/rmem_max

6. 管理报文碎片
未经处理的UDP报文碎片到达最高点,默认262144byte 也就是256KB,内核会丢弃正在送入的报文碎片,也就是会丢失报文,直到到达下限值
,默认192KB
NFS协议使用了分片的UDP报文,
cat /proc/sys/net/ipv4/ipfrag_high_thresh

echo 65546 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 1966 > /proc/sys/net/ipv4/ipfrag_low_thresh

7. 为啥nfs server断开后client端偶尔会不响应及解决办法

nfs server unavailable/unreachable后,client端偶尔会出现很诡异的情况:任何命令都跑不了/跑了没输出
这个问题在网上找了半天也没找到根本的原因,可能得读代码才能搞懂了,但是这个代码可不是一般的长......

找到了个解决办法,mount nfs的时候option制动为 intr, soft就可以避免如上这种情况:
intr: 默认情况下,当一个nfs 变得不可达后,在这个挂载点上的操作如ls、cd等会hang住。指定这个参数后,ls/cd之类的命令会收到信号EINTR 从而退出。
soft: 默认情况下,如果nfs server断开了,client这端会不停的尝试重新恢复连接而不是断开,这样频繁的重试会导致系统hang住,但是为啥就不知道了。指定soft后,client会timeout抛出异常而不是一直傻试。

你可能感兴趣的:(NFS再优化)