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抛出异常而不是一直傻试。
阅读(1498) | 评论(0) | 转发(0) |