chmod 在 NFS 上非常慢

chmod 在 NFS 上非常慢

有什么方法可以加快chmodNFS 服务器的速度吗?

每次运行脚本时我都会运行chmod多个文件。在本地运行时几乎可以立即完成,但在以 NFS 服务器为目标时则需要 10-20 分钟。

笔记:这是在 Solaris 上。

答案1

建议#1

我的第一个怀疑是它如何安装在您执行命令的系统上。查看mount命令以及 来showmount -e了解它是如何导出到您的系统的。

建议#2

我要做的下一件事是调查您正在运行的实际命令strace,看看哪个函数花费的时间最长。

例如:

$ strace -s 2000 chmod u+w afile
execve("/bin/chmod", ["chmod", "u+w", "afile"], [/* 27 vars */]) = 0
brk(NULL)                               = 0x1143000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fad70431000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=33236, ...}) = 0
mmap(NULL, 33236, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fad70428000
close(3)                                = 0
...
...
arch_prctl(ARCH_SET_FS, 0x7fad70425740) = 0
mprotect(0x7fad70206000, 16384, PROT_READ) = 0
mprotect(0x60c000, 4096, PROT_READ)     = 0
mprotect(0x7fad70432000, 4096, PROT_READ) = 0
munmap(0x7fad70428000, 33236)           = 0
brk(NULL)                               = 0x1143000
brk(0x1164000)                          = 0x1164000
brk(NULL)                               = 0x1164000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106070960, ...}) = 0
mmap(NULL, 106070960, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fad6991b000
close(3)                                = 0
umask(0)                                = 022
stat("afile", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fchmodat(AT_FDCWD, "afile", 0644)       = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

我认为 Solaris 上的等效项是truss,但希望您能得到建议。

建议#3

这是哪个 NFS 协议? NFSv3 还是 v4?有几个与两者相关的选项可能会影响整体性能,我会根据您的情况对这些选项进行调查。

例如:
  • 例如,请确保您的文件导出的是且不是 的/etc/exports共享。asyncsync

    /export/raid0/home      192.168.*/24(rw,secure,no_root_squash,async,wdelay)
    

    确保安装选项async也包含在客户端上。

  • 还要确保服务器不必更新您正在访问的文件的 inode 上的 atime。

以下是 nixcraft 的列表,其中突出显示了我过去调整过的许多选项:

推荐的 Mount 命令 NFS 调整选项

  • 诺阿克:禁用访问控制列表 (ACL) 处理。
  • :创建文件时禁止检索新属性。
  • 大小:从 NFS 服务器读取文件时 NFS 使用的字节数。 rsize 在服务器和客户端之间协商以确定两者可以支持的最大块大小。该选项指定的值是可以使用的最大大小;然而,实际使用的尺寸可能更小。注意:将此大小设置为小于支持的最大块大小的值将对性能产生不利影响。
  • 大小:将文件写入 NFS 服务器时 NFS 使用的字节数。 wsize 在服务器和客户端之间协商以确定两者可以支持的最大块大小。该选项指定的值是可以使用的最大大小;然而,实际使用的尺寸可能更小。注意:将此大小设置为小于支持的最大块大小的值将对性能产生不利影响。
  • 诺阿泰姆:设置此值将禁止 NFS 服务器更新 inode 访问时间。由于大多数应用程序不一定需要此值,因此您可以安全地禁用此更新。
  • 诺迪拉泰姆:设置此值将禁止 NFS 服务器更新目录访问时间。这是 noatime 的目录等效设置。
  • 诺阿克:完全禁用所有形式的属性缓存。这会带来显着的性能损失,但当两个不同的 NFS 客户端都主动写入服务器上的公共导出时,它允许两个不同的 NFS 客户端获得合理的结果。

参考

相关内容