Linux

在沒有 iotop 的情況下確定高 NFS/IO 使用率的原因

  • December 13, 2012

我有一台伺服器正在為使用者的主目錄執行 NFSv4 導出。大約有 25 名使用者(主要是開發人員/分析師)和大約 40 台伺服器安裝主目錄導出。性能很差,使用者經常看到簡單命令(如 ls 或編寫一個小文本文件)會出現數秒的延遲。有時主目錄掛載完全掛起幾分鐘,使用者收到“權限被拒絕”錯誤。

硬體是具有雙 E5620 CPU 和 8 GB RAM 的 Dell R510。在硬體 RAID-6 中配置了八個 15k 2.5 英寸 600 GB 驅動器 (Seagate ST3600057SS),帶有一個熱備用。RAID 控制器是帶 512MB 記憶體的 Dell PERC H700(Linux 將其視為 LSI MegaSAS 9260)。作業系統為 CentOS 5.6,主目錄分區為 ext3,選項為“rw,data=journal,usrquota”。

我將硬體 RAID 配置為向作業系統提供兩個虛擬磁碟:/dev/sda 用於作業系統(引導、根和交換分區),/dev/sdb 用於主目錄。

我覺得好奇和懷疑的是,sda 設備通常具有非常高的使用率,即使它只包含作業系統。我希望這個虛擬驅動器幾乎一直處於空閒狀態。根據“free”和“vmstat”,系統沒有交換。為什麼這個設備會有很大的負載?

這是來自 iostat 的 30 秒快照:

Time: 09:37:28 AM
Device:         rrqm/s   wrqm/s   r/s   w/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 之外,其中一個建議說要執行“echo 1 > /proc/sys/vm/block_dump”。我這樣做了(在將核心消息定向到 tempfs 之後)。在大約 13 分鐘內,我進行了大約 70 萬次讀取或寫入,大約一半來自 kjournald,另一半來自 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/s   r/s   w/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 核心中,我在 2011 年開始看到 iotop 通過 RPMForge 包工作。Red Hatiotop在 2012 年成為標準作業系統的一部分。在 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 控制器

引用自:https://serverfault.com/questions/456931