Mat*_*att 3 linux performance storage nfs io
我有一台服务器正在为用户的主目录执行 NFSv4 导出。大约有 25 个用户(主要是开发人员/分析师)和大约 40 台服务器安装主目录导出。性能很糟糕,用户经常会看到简单命令(例如 ls 或写入小文本文件)出现数秒的延迟。有时,主目录挂载完全挂起几分钟,用户会收到“权限被拒绝”错误。
\n\n硬件是具有双 E5620 CPU 和 8 GB RAM 的 Dell R510。有八个 15k 2.5\xe2\x80\x9d 600 GB 驱动器 (Seagate ST3600057SS) 配置为硬件 RAID-6,具有单个热备用。RAID 控制器是带有 512MB 缓存的 Dell PERC H700(Linux 将其视为 LSI MegaSAS 9260)。操作系统为 CentOS 5.6,主目录分区为 ext3,选项为 \xe2\x80\x9crw,data=journal,usrquota\xe2\x80\x9d。
\n\n我将 HW RAID 配置为向操作系统提供两个虚拟磁盘:/dev/sda 用于操作系统(引导分区、根分区和交换分区),/dev/sdb 用于主目录。
\n\n我感到好奇和怀疑的是,sda 设备通常具有非常高的利用率,即使它只包含操作系统。我希望这个虚拟驱动器几乎一直闲置。根据“free”和“vmstat”,系统没有交换。为什么该设备上会有很大的负载?
\n\n这是 iostat 的 30 秒快照:
\n\nTime: 09:37:28 AM\nDevice: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util\nsda 0.00 44.09 0.03 107.76 0.13 607.40 11.27 0.89 8.27 7.27 78.35\nsda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\nsda2 0.00 44.09 0.03 107.76 0.13 607.40 11.27 0.89 8.27 7.27 78.35\nsdb 0.00 2616.53 0.67 157.88 2.80 11098.83 140.04 8.57 54.08 4.21 66.68\nsdb1 0.00 2616.53 0.67 157.88 2.80 11098.83 140.04 8.57 54.08 4.21 66.68\ndm-0 0.00 0.00 0.03 151.82 0.13 607.26 8.00 1.25 8.23 5.16 78.35\ndm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\ndm-2 0.00 0.00 0.67 2774.84 2.80 11099.37 8.00 474.30 170.89 0.24 66.84\ndm-3 0.00 0.00 0.67 2774.84 2.80 11099.37 8.00 474.30 170.89 0.24 66.84\nRun Code Online (Sandbox Code Playgroud)\n\n看起来iotop是用于嗅探此类问题的理想工具。但我使用的是 CentOS 5.6,它没有足够新的内核来支持该程序。
\n\n我查看了确定哪个进程导致大量磁盘 I/O?,除了 iotop 之外,建议之一是执行“echo 1 > /proc/sys/vm/block_dump”。我这样做了(在将内核消息定向到 tempfs 之后)。在大约 13 分钟内,我进行了大约 700k 的读取或写入,大约一半来自 kjournald,另一半来自 nfsd:
\n\n# egrep " kernel: .*(READ|WRITE)" messages | wc -l\n768439\n# egrep " kernel: kjournald.*(READ|WRITE)" messages | wc -l\n403615\n# egrep " kernel: nfsd.*(READ|WRITE)" messages | wc -l\n314028\nRun Code Online (Sandbox Code Playgroud)\n\n无论如何,在过去一小时内,主目录驱动器的利用率始终超过 90%。我的 30 秒 iostat 不断显示如下输出:
\n\nTime: 09:36:30 PM\nDevice: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util\nsda 0.00 6.46 0.20 11.33 0.80 71.71 12.58 0.24 20.53 14.37 16.56\nsda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\nsda2 0.00 6.46 0.20 11.33 0.80 71.71 12.58 0.24 20.53 14.37 16.56\nsdb 137.29 7.00 549.92 3.80 22817.19 43.19 82.57 3.02 5.45 1.74 96.32\nsdb1 137.29 7.00 549.92 3.80 22817.19 43.19 82.57 3.02 5.45 1.74 96.32\ndm-0 0.00 0.00 0.20 17.76 0.80 71.04 8.00 0.38 21.21 9.22 16.57\ndm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\ndm-2 0.00 0.00 687.47 10.80 22817.19 43.19 65.48 4.62 6.61 1.43 99.81\ndm-3 0.00 0.00 687.47 10.80 22817.19 43.19 65.48 4.62 6.61 1.43 99.82\nRun Code Online (Sandbox Code Playgroud)\n
更简单的方法是升级操作系统软件包。
CentOS 5.7绝对可以使用 iotop。Red Hat 将每个进程 IO 统计向后移植到 2.6.18-144 内核中,并且我开始在 2011 年通过 RPMForge 软件包看到 iotop 工作。Red Hat 于 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
Run Code Online (Sandbox Code Playgroud)
不要认为这是一个逃避的答案......但在这一点上,没有理由运行旧的操作系统。EL 5.8 已经稳定下来,修复了大量错误,并让您可以访问所需的分析工具 (iotop)。我假设您现在已经修改了Linux I/O 电梯并调整了硬件 RAID 控制器。
| 归档时间: |
|
| 查看次数: |
16158 次 |
| 最近记录: |