确定没有iotop的高NFS / IO利用率的原因

我有一个为用户的主目录做NFSv4导出的服务器。 大约有25个用户(主要是开发人员/分析员)和大约40个安装主目录导出的服务器。 性能是悲惨的,用户经常看到简单的命令(如ls,或写一个小文本文件)的多秒滞后。 有时,主目录挂载完全挂起几分钟 ,用户获得“权限被拒绝”的错误。

硬件是配备双E5620 CPU和8 GB RAM的戴尔R510。 有八个15k 2.5“600 GB硬盘(Seagate ST3600057SS),configuration为硬件RAID-6,带有一个热备份。 RAID控制器是一个戴尔PERC H700瓦特/ 512MBcaching(Linux认为这是一个LSI MegaSAS 9260)。 OS是CentOS 5.6,主目录分区是ext3,选项“rw,data = journal,usrquota”。

我已经configuration了HW RAID,以向操作系统提供两个虚拟磁盘:操作系统(启动,根和交换分区)的/ dev / sda和主目录的/ dev / sdb。

我觉得好奇和怀疑的是,即使只包含操作系统,sda设备的利用率也经常很高。 我预计这个虚拟驱动器几乎总是闲置。 根据“free”和“vmstat”,系统不交换。 为什么在这个设备上会有很大的负载?

以下是iostat的30秒快照:

Time: 09:37:28 AM Device: rrqm/s wrqm/sr/sw/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 44.09 0.03 107.76 0.13 607.40 11.27 0.89 8.27 7.27 78.35 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 44.09 0.03 107.76 0.13 607.40 11.27 0.89 8.27 7.27 78.35 sdb 0.00 2616.53 0.67 157.88 2.80 11098.83 140.04 8.57 54.08 4.21 66.68 sdb1 0.00 2616.53 0.67 157.88 2.80 11098.83 140.04 8.57 54.08 4.21 66.68 dm-0 0.00 0.00 0.03 151.82 0.13 607.26 8.00 1.25 8.23 5.16 78.35 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.67 2774.84 2.80 11099.37 8.00 474.30 170.89 0.24 66.84 dm-3 0.00 0.00 0.67 2774.84 2.80 11099.37 8.00 474.30 170.89 0.24 66.84 

看起来iotop是用来嗅探这类问题的理想工具。 但是我在CentOS 5.6上,它没有足够新的内核来支持这个程序。

我看着确定哪个进程导致繁重的磁盘I / O? ,除了iotop之外,其中一个build议是做“echo 1> / proc / sys / vm / block_dump”。 我做到了(将内核消息定向到临时文件之后)。 在大约13分钟的时间里,我读了或写了大约70万次,大约有一半来自杂志,另一半来自nfsd:

 # egrep " kernel: .*(READ|WRITE)" messages | wc -l 768439 # egrep " kernel: kjournald.*(READ|WRITE)" messages | wc -l 403615 # egrep " kernel: nfsd.*(READ|WRITE)" messages | wc -l 314028 

在最后一个小时内,主目录驱动器的利用率一直超过90%。 我的30秒iostat不断显示这样的输出:

 Time: 09:36:30 PM Device: rrqm/s wrqm/sr/sw/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 6.46 0.20 11.33 0.80 71.71 12.58 0.24 20.53 14.37 16.56 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 6.46 0.20 11.33 0.80 71.71 12.58 0.24 20.53 14.37 16.56 sdb 137.29 7.00 549.92 3.80 22817.19 43.19 82.57 3.02 5.45 1.74 96.32 sdb1 137.29 7.00 549.92 3.80 22817.19 43.19 82.57 3.02 5.45 1.74 96.32 dm-0 0.00 0.00 0.20 17.76 0.80 71.04 8.00 0.38 21.21 9.22 16.57 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 687.47 10.80 22817.19 43.19 65.48 4.62 6.61 1.43 99.81 dm-3 0.00 0.00 687.47 10.80 22817.19 43.19 65.48 4.62 6.61 1.43 99.82 

更简单的方法是升级您的操作系统包。

CentOS 5.7 绝对可以使用iotop 。 Red Hat将每个进程的IO记帐反向移植到2.6.18-144内核中,并且通过RPMForge软件包,我开始在2011年的某个地方看到iotop的工作。 红帽在2012年使iotop成为标准操作系统的一部分 。在5.7系统上…

 [root@Tantalalicious ~]# cat /etc/issue CentOS release 5.7 (Final) Kernel \r on an \m [root@Tantalalicious ~]# uname -a Linux Tantalalicious 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux [root@Tantalalicious ~]# iotop Total DISK READ: 25.54 M/s | Total DISK WRITE: 87.03 K/s TID PRIO USER< DISK READ DISK WRITE SWAPIN IO COMMAND 31441 be/4 465 0.00 B/s 0.00 B/s 0.00 % 0.00 % -bash 31540 be/4 465 0.00 B/s 0.00 B/s 0.00 % 0.00 % dbc 22587 be/4 admin 0.00 B/s 0.00 B/s 0.00 % 0.00 % sh 22588 be/4 admin 0.00 B/s 0.00 B/s 0.00 % 0.00 % sh 

不要以为这是一个答案的阴谋……但在这一点上,没有理由去运行旧的操作系统。 EL 5.8已经稳定下来,修复了大量的错误,让您可以访问您需要的分析工具(iotop)。 我假设你已经修改了你的Linux I / O电梯,并且现在调整了硬件RAID控制器 。

您可以使用lsof列出打开的文件,这可能有助于确定正在使用的内容。

研究一般性能调整,例如,确保在RAID控制器上启用回写caching,使用noatime挂载ext3和nfs共享,调整rsize / wsize,除非必须,否则不要使用noac挂载nfs。