NFS导致的IO负载过大的问题

NFS导致的IO负载过大的问题

作者:老王

公司一台服务器IO异常,先检测一下服务器状态:

[www@WebServer www]$ top
16:17:54 up 6:13, 4 users, load average: 15.03, 11.25, 8.96
87 processes: 85 sleeping, 1 running, 1 zombie, 0 stopped
CPU states: cpu    user    nice system    irq softirq iowait    idle
           total    9.2%    0.0%    2.6%   0.4%     0.4%   39.7%   47.5%
           cpu00    9.2%    0.0%    3.0%   3.0%     2.7%   48.6%   33.2%
           cpu01   13.8%    0.0%    2.7%   0.3%     0.0%   30.5%   52.5%

[www@WebServer www]$ vmstat 1
procs                      memory      swap          io     system         cpu
r b   swpd   free   buff cache   si   so    bi    bo   in    cs us sy id wa
0 2   4924 22572 41884 3072376    0    0 1028 2256 4215 5557 10 3 55 32
0 3   4924 21528 41876 3073488    0    0 1024 1236 2793 2656 16 2 45 47

可以看出IO负载很大,同时发现 一个僵尸进程(zombie),经确认不是IO负载的罪魁祸首。

[www@WebServer www]$ iostat
Linux 2.4.21-4.ELsmp (WebServer)

avg-cpu: %user   %nice %system %iowait   %idle
          11.05    0.00    2.96   33.89   52.09

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
cciss/c1d0       40.46       172.63       151.65    3886978    3414712
cciss/c1d0p1     40.45       172.62       151.65    3886722    3414712
cciss/c0d0      263.09      1395.17      1037.15   31414204   23352808
cciss/c0d0p1     42.79        38.49       316.87     866738    7134680
cciss/c0d0p2     10.55        33.16       179.16     746584    4034144
cciss/c0d0p3    209.73      1323.51       541.12   29800618   12183984

大部分IO压力都集中在cciss/c0d0p3上面。

[www@WebServer www]$ df -h
Filesystem            Size Used Avail Use% Mounted on
/dev/cciss/c0d0p3     258G 180G 66G 74% /home
192.168.0.4:/home/x   258G 208G 37G 85% /home/x
192.168.0.4:/home/y   258G 208G 37G 85% /home/y
192.168.0.4:/home/z   258G 208G 37G 85% /home/z

可以确定IO压力是NFS造成的。

[www@WebServer www]$ cat /etc/fstab
 

未发现NFS设置。

[www@WebServer www]$ cat /etc/rc.local
mount -t nfs -o nolock -o intr -o soft 192.168.0.4:/home/x /home/x
mount -t nfs -o nolock -o intr -o soft 192.168.0.4:/home/y /home/y
mount -t nfs -o nolock -o intr -o soft 192.168.0.4:/home/z /home/z

得到NFS相关设置。

优化配置,视NFS版本调整rsize和wsize的设置,man mount可以看到相关信息:

Mount options for nfs:

rsize=8192,wsize=8192
      This will make your nfs connection faster than with the default
      buffer size of 4096. (NFSv2 does not work with larger values of
      rsize and wsize.)

Mount options for nfs4:

rsize=32768,wsize=32768
      This will make your nfs connection faster than with the default
      buffer size of 4096.

查看一下192.168.0.4的NFS版本:

[www@FileServer /]# /usr/sbin/rpcinfo -p
100003    2   udp   2049 nfs
100003    3   udp   2049 nfs
100003    2   tcp   2049 nfs
100003    3   tcp   2049 nfs

可以看到是NFS2和NFS3混合使用。NFS2里,限制是8K,NFS3的限制取决于源代码里NFSSVC_MAXBLKSIZE的大小(/usr/include/linux/nfsd/const.h),一般也是8K。总的来说,Linux2.4内核里,NFS上限一般就是8K,如果条件允许,尽量使用Linux2.6内核,那样NFS上限可以达到32K,会爽得多。

当然,有时候不可能这么容易的确定BlockSize的大小,因为除了NFS自身上限的限制,还有诸如网络MTU等等的影响:

MTU的检测:

每个网段都有一个MTU,一般就是1500,一个数据要能传输,就必须符合MTU,大了的话就要分割成多块再传输,如果分块过多,可能会影响NFS的性能。

先来检测一下MTU的大小:

[www@WebServer www]$ tracepath 192.168.0.4
1: WebServer (192.168.0.3) asymm 65   0.236ms pmtu 1500
1: FileServer (192.168.0.4) 1.513ms reached
Resume: pmtu 1500 hops 1 back 1

不出所料,是1500。不过修改MTU对我来说有点太过专业,我还是通过别的方式来提升NFS性能吧。

我们可以通过一些测试来判断rsize, wsize设置是否合理:

测试NFS写操作:

假设256M的数据,分别按4k, 8k, 16k的BlockSize大小进行测试:

time dd if=/dev/zero of=/home/x/testfile bs=4k count=65536
time dd if=/dev/zero of=/home/x/testfile bs=8k count=32768
time dd if=/dev/zero of=/home/x/testfile bs=16k count=16384

多测试几次,就可以根据时间来判断最佳的wsize大小。

测试NFS读操作:

假设256M的数据,分别按4k, 8k, 16k的BlockSize大小进行测试:
time dd if=/home/x/testfile of=/dev/null bs=4k
time dd if=/home/x/testfile of=/dev/null bs=8k
time dd if=/home/x/testfile of=/dev/null bs=16k

多测试几次,就可以根据时间来判断最佳的rsize大小。 ---------------------------------

注:因为我没有Root权限,无法修改NFS设置,只能研究至此。

参考链接: http://nfs.sourceforge.net/nfs-howto/ar01s05.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值