分类: 系统运维
2013-08-03 18:30:34
NFS是linux下最常见的service,配置各方面都很简单,但是一些性能方面的设置还是要注意,下边是google到的结果:
sync、async选项对于NFS Server和NFS Client含义是不一样的
NFS server采用sync还是async是在/etc/exports里面设置的。如果设置为async,则所有client的写操作都会先放到内存 cache中,不会立即写到硬盘,并欺骗client写操作已经完成。如果设置为sync,则所有写操作都直接写入硬盘,写完以后再应答client。
NFS Client采用sync还是async是在mount的时候用-o指定的。如果设置为sync,则client每次调用write函数都会立即提交到 server。如果设置为async,write操作会先在client端缓存起来,等到缓冲到一定数量再一次提交到server。具体可以看man nfs。
nfs server没有必要使用sync选项,一来不能很好地利用系统cache,二来对性能的影响实在太大。
NFS will by default perform a level of caching of directory and file contents at the kernel level of the system. If machine one updates a file and machine two has still got a copy of the file in cache, then if machine two attempts to access the file then it may not see the newer version of the file until its cache expires.
Check the man page for nfs for the following parameters:
acregmin=n The minimum time in seconds that attributes of a regular file should be cached before requesting fresh information from a server. The default is 3 seconds.
acregmax=n The maximum time in seconds that attributes of a regular file can be cached before requesting fresh information from a server. The default is 60 seconds.
acdirmin=n The minimum time in seconds that attributes of a directory should be cached before requesting fresh information from a server. The default is 30 seconds.
acdirmax=n The maximum time in seconds that attributes of a directory can be cached before requesting fresh information
from a server. The default is 60 seconds.
actimeo=n Using actimeo sets all of acregmin, acregmax, acdirmin,and acdirmax to the same value. There is no default value.
noac Disable all forms of attribute caching entirely. This
extracts a significant performance penalty but it
allows two different NFS clients to get reasonable
results when both clients are actively writing to a common export on the server.
If the NFS server is a NetApp filer sharing to Linux boxes your performance will be abysmal unless noac is disabled 。
the NFS client will be requesting every attribute from the NFS server for every stat() call on every file and/or directory. The CPU on the NFS server then ends up going through the roof. The options I typically use to get reasonably good performance (but not immediate updates) is: rw,tcp,rsize=16384,wsize=16384,hard,nointr
以上说明了我最近遇到的一个诡异的问题的原因,NFS 服务器上的文件在client上不能及时出现,这个和developer一起debug的时候发现的,其实一个很简单的解决办法,在client上设置一个cron定期强制刷新 touch ${NFS_PATH}/test & >/dev/null 即可