Определение причины высокого использования NFS/IO без iotop

У меня есть сервер, который выполняет экспорт NFSv4 для домашних каталогов пользователя. Примерно 25 пользователей (в основном разработчики / аналитики) и около 40 серверов, монтирующих экспорт в домашний каталог. Производительность убогая: пользователи часто видят многосекундные лаги для простых команд (например, ls или при написании небольшого текстового файла). Иногда монтирование домашнего каталога полностью зависает на несколько минут, и пользователи получают ошибки "Отказано в доступе".

Аппаратное обеспечение - Dell R510 с двумя процессорами E5620 и 8 ГБ оперативной памяти. В аппаратном RAID-6 есть восемь жестких дисков объемом 15 КБ по 2,5 ГБ (Seagate ST3600057SS) с одним горячим резервом. RAID-контроллер представляет собой Dell PERC H700 с 512 МБ кэш-памяти (Linux рассматривает это как LSI MegaSAS 9260). ОС - CentOS 5.6, раздел домашнего каталога - ext3, с опциями "rw,data=journal,usrquota".

У меня есть HW RAID, сконфигурированный для представления двух виртуальных дисков в ОС: /dev/sda для ОС (загрузочный, корневой и раздел подкачки) и /dev/sdb для домашних каталогов.

Что я нахожу любопытным и подозрительным, так это то, что устройство sda часто имеет очень высокую загрузку, даже если оно содержит только ОС. Я ожидал бы, что этот виртуальный диск будет простаивать почти все время. Система не обменивается, по словам "free" и "vmstat". Почему на этом устройстве будет большая нагрузка?

Вот 30-секундный снимок с iostat:

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, который не имеет достаточно нового ядра для поддержки этой программы.

Я посмотрел на Определение, какой процесс вызывает тяжелый дисковый ввод-вывод? и, кроме iotop, в одном из предложений говорится, что нужно сделать "echo 1 > /proc/sys/vm/block_dump". Я сделал это (после направления сообщений ядра в tempfs). Примерно через 13 минут у меня было около 700 тысяч операций чтения или записи, примерно половина из 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

2 ответа

Решение

Более простой подход - обновить пакеты ОС.

CentOS 5.7 определенно может использовать iotop. Red Hat перенесла учет операций ввода-вывода на каждый процесс в ядра 2.6.18-144, и я начал видеть, что iotop работает где-то в 2011 году через пакеты RPMForge. Red Hat сделал iotop часть стандартной ОС 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 и уже настроили аппаратный RAID-контроллер.

Ты можешь использовать lsof для просмотра списка открытых файлов, это может помочь определить, что используется.

Изучите общую настройку производительности, например, убедитесь, что на контроллере RAID включено кэширование с обратной записью, смонтируйте общие ресурсы ext3 и nfs с noatime, настройте rsize/wsize, не монтируйте nfs с noac без необходимости.

Другие вопросы по тегам