分类:
2006-06-20 21:39:18
NFS 收集各类 NFS 操作执行情况的统计信息,会同出错信息和性能指标。您可以使用以下命令来识别网络问题和观察在您的系统上进行的各类 NFS 操作。
:NONE.nfsstat 命令显示有关 NFS 和 RPC 接口到客户机和服务器内核的统计信息。这个命令还可以用来重新初始化这些统计信息的计数器(nfsstat -z)。考虑到性能上的问题,RPC 统计信息(-r 选项)是首先需要察看的。NFS 统计信息向您展示了应用程序使用 NFS 的情况。
:NONE.nfsstat 命令显示了有关 RPC 调用的统计信息,例如:
:NONE.nfsstat 命令输出的 NFS 统计信息部分被分为 NFS V2 和 NFS V3 两部分。而 RPC 统计信息部分被分为面向连接(TCP)和无连接 (UDP)两部分。
对于已接收的 NFS 调用(calls)和由于认证未通过而被拒绝的调用(badcalls)NFS 服务器显示它们的数目,同时也能显示其他很多种类已发生调用的数目和百分比。
下例展示了 nfsstat 命令带 -s 参数选项时输出的服务器部分,如下:
# nfsstat -s Server rpc: Connection oriented: calls badcalls nullrecv badlen xdrcall dupchecks dupreqs 15835 0 0 0 0 772 0 Connectionless: calls badcalls nullrecv badlen xdrcall dupchecks dupreqs 0 0 0 0 0 0 0 Server nfs: calls badcalls public_v2 public_v3 15835 0 0 0 Version 2: (0 calls) null getattr setattr root lookup readlink read 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% wrcache write create remove rename link symlink 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% mkdir rmdir readdir statfs 0 0% 0 0% 0 0% 0 0% Version 3: (15835 calls) null getattr setattr lookup access readlink read 7 0% 3033 19% 55 0% 1008 6% 1542 9% 20 0% 9000 56% write create mkdir symlink mknod remove rmdir 175 1% 185 1% 0 0% 0 0% 0 0% 120 0% 0 0% rename link readdir readdir+ fsstat fsinfo pathconf 87 0% 0 0% 1 0% 150 0% 348 2% 7 0% 0 0% commit 97 0%
RPC 输出的服务器部分(-s)包括下列各项:
输出结果中还同时显示了各类调用的数目和各自的百分比。
重复性检查是为那些不能在两次执行中返回同一结果的操作而提供的。这方面经典的例子是 rm 命令。第一个 rm 命令也许成功了,但是如果应答丢失了,客户机将会重发这个命令。我们希望这样的重复请求能获得成功,此时重复高速缓存被查询,如果发现是一个重复请求则相同的(成功的)结果被作为第二个重复请求的结果返回,就好像是由第一个请求所产生的结果一样。
通过查看不同类型操作调用的百分比(如 getattr()、read()、write()、readdir()),您可以决定要用哪一类的调优。例如:如果 getattr() 调用的百分比非常高的话,则调优属性高速缓存是可能会有效果的;如果 write() 调用的百分比过高的话,则磁盘和 LVM 调优就显得重要了;又如果 read() 调用百分比过高,则使用更多的内存用以缓冲文件就能提高性能。
NFS 客户机显示了已发送和被拒绝的调用数,同时显示已接收客户机句柄的次数(clgets)和各类调用的数目以及各自的百分比。
下例展示了 nfsstat 命令带 -c 参数选项时输出的客户机本分,如下:
# nfsstat -c Client rpc: Connection oriented calls badcalls badxids timeouts newcreds badverfs timers 0 0 0 0 0 0 0 nomem cantconn interrupts 0 0 0 Connectionless calls badcalls retrans badxids timeouts newcreds badverfs 6553 0 0 0 0 0 0 timers nomem cantsend 0 0 0 Client nfs: calls badcalls clgets cltoomany 6541 0 0 0 Version 2: (6541 calls) null getattr setattr root lookup readlink read 0 0% 590 9% 414 6% 0 0% 2308 35% 0 0% 0 0% wrcache write create remove rename link symlink 0 0% 2482 37% 276 4% 277 4% 147 2% 0 0% 0 0% mkdir rmdir readdir statfs 6 0% 6 0% 30 0% 5 0% Version 3: (0 calls) null getattr setattr lookup access readlink read 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% write create mkdir symlink mknod remove rmdir 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% rename link readdir readdir+ fsstat fsinfo pathconf 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% commit 0 0%
RPC 输出的客户机部分(-c)包括下列各项:
输出结果中还同时显示了各类调用的数目和各自的百分比。
考虑到性能监视上的问题,nfsstat -c 命令提供信息用以显示网络上是否存在丢弃 UDP 数据包的现象。如果一个网络无法处理某个包,则可能会丢弃它。数据包被丢弃可由以下因素引起:网络硬件的响应时间、网络软件的响应时间或服务器上超负载的 CPU。被丢弃的包并没有真正的丢失,因为一个替代请求会为其发送。
RPC 统计信息中的 retrans 列显示了由于等待响应而超时重发的请求数。这种情形就与丢弃 UDP 包有关。如果 retrans 这一项中的数目持续地超过第一列中调用总数的百分之五时,就表明存在问题,服务器已经不再能满足需求了。可在服务器上使用 vmstat、netpmon和 iostat 命令检查负载。
很大的 badxid 数目意味着请求被发到不同的 NFS 服务器上,但是服务器由于负载过重而没有能够在客户机的 RPC 调用超时重发之前给予响应。每当已发送的请求接收到一个重复的响应时 badxid 值就递增一(每个 RPC 请求在整个传输生命期内都保留有自己的 XID)。过多的重发请求对服务器产生了额外的压力,进一步使响应时间延长。如果 badxid 和 timeouts 的数目超过了总调用数的百分之五,可以用 smitty chnfsmnt 命令加大 NFS-mount 选项中的 timeo 参数。如果 badxid 是 0,is 0, 但 retrans 和 timeouts 相当大,可以尝试减少 NFS 缓冲区的大小(使用 mount 命令中的 rsize 和 wsize 选项)。
如果服务器是 CPU 绑定的(CPU-bound),NFS 和 它的守护进程会受到影响。要在这种情形下提高性能,服务器必须调优、升级或者用户可以让应用程序文件放置在本机上。如果服务器是 I/O 绑定的(I/O-bound),服务器文件系统可以被重新组织或者可以使用本地化的文件。
如果重发和超时的数目接近于同一个值时,可以确定包正在被丢弃。包很少在客户机端被丢弃。通常,包要么是在网络上被丢弃,要么是在服务器上被丢弃。服务器可能在以下两种情况下丢弃包:当包从服务器接口驱动程序的发送队列中溢出时,或者当服务器的用户数据报协议(UDP)套接字缓冲区溢出时(nfs_socketsize)。如果在服务器上没有出现套接字缓冲区溢出 或 Oerrs ,同时客户机上又有许多的重发和超时,那么包可能就是在网络上被丢弃的。问题也许是出在传播媒介和网络设备上,比如路由器、桥接器或集线器。网络检漏器(network sniffer)以及其他的工具可被用来调试诊断这些问题。更详细的讨论请参见 :NONE.
在某些场合下,应用程序或用户经历了很差的性能,然而在用 nfsstat -c 命令检查时输出结果却显示超时和重发数目等于零或很少。这说明客户机从服务器接收响应的速度与请求的速度是一样快的。这时,首先要检查在客户机上运行的 biod 守护进程的数目是否适当的。该检查当一个应用程序正在锁定远程文件时仍然可测。当远程文件锁加在一个正服务于 NFS 的文件上时,客户机将关闭所有该文件在高速缓存上的数据和属性而转入一种完全同步的操作方式。结果就导致很慢的执行性能,不幸的是这种情况还十分的普遍。包的锁定可以从 ipreport 的输出结果中通过查找 NLM 请求来识别。
:NONE.nfsstat -m 命令显示服务器名、服务器地址、mount(挂载)标志、当前读写大小、重发次数和每个客户机上 NFS mount 的动态重发次数,如下:
# nfsstat -m /SAVE from /SAVE:itsorus.austin.ibm.com Flags: vers=2,proto=udp,auth=unix,soft,intr,dynamic,rsize=8192,wsize=8192,retrans=5 Lookups: srtt=27 (67ms), dev=17 (85ms), cur=11 (220ms) Reads: srtt=16 (40ms), dev=7 (35ms), cur=5 (100ms) Writes: srtt=42 (105ms), dev=14 (70ms), cur=12 (240ms) All: srtt=27 (67ms), dev=17 (85ms), cur=11 (220ms)
上例输出结果中圆括号内的数字是实际时间,单位是毫秒。其他的值是操作系统内核保留维护的无单位的值。您可以忽略这些无单位的值。上例分别显示出了查找、读、写和所有这些操作组合在一起(All)的响应时间。输出中用到的其他定义如下:
有关该命令及其输出的讨论请参见 。
:NONE.nfso 命令用来配置 NFS 属性。可以设置或显示当前运行内核的网络选项。因此,这个命令必须在每个系统启动或网络配置后才能运行。
:NONE.nfso 的参数和各自的取值可以用 nfso -a 命令显示,如下:
(tremor:) # nfso -a portcheck= 0 udpchecksum= 1 nfs_socketsize= 60000 nfs_tcp_socketsize= 60000 nfs_setattr_error= 0 nfs_gather_threshold= 4096 nfs_repeat_messages= 0 nfs_udp_duplicate_cache_size= 5000 nfs_tcp_duplicate_cache_size= 5000 nfs_server_base_priority= 0 nfs_dynamic_retrans= 1 nfs_iopace_pages= 0 nfs_max_connections= 1024 nfs_max_threads= 128 nfs_use_reserved_ports= 0 nfs_device_specific_bufs= 1 nfs_server_clread= 1 nfs_rfc1323= 1 nfs_max_write_size= 0 nfs_max_read_size= 0 nfs_allow_all_signals= 0 nfs_v2_pdts= 1 nfs_v3_pdts= 1 nfs_v2_vm_bufs= 1000 nfs_v3_vm_bufs= 1000 nfs_securenfs_authtimeout= 0 nfs_v3_server_readdirplus= 1
如果需要查阅有关这些属性的描述,请参见。许多 NFS 属性是运行时属性(run-time attributes),它们是可以在任何时间被修改的。而要修改负载时属性(load time attributes),如 nfs_socketsize,就需要 NFS 先停下来而后再重新启动。
要显示或者修改一个指定的参数,可使用 nfso -o 命令,如下:
# nfso -o portcheck portcheck= 0 # nfso -o portcheck=1
参数还可以重新设置成它们的缺省值,使用 -d 选项,如下:
# nfso -d portcheck # nfso -o portcheck portcheck= 0
以下是与 NFS 有关的文件、命令、守护进程和子程序的摘要。需要详细信息,请参见 《AIX 5L V5.2 系统管理指南:通信与网络》 和 《AIX 5L V5.2 命令参考大全》。
以下是 NFS 文件列表,包括配置信息:
以下是 NFS 命令列表:
以下是 NFC 锁定守护进程列表:
以下是网络服务守护进程和实用工具的列表:
以下是网络安全守护进程和实用工具列表:
以下是无磁盘客户机支持配置文件:
以下是 NFS 子程序列表: