Назад | Перейти на главную страницу

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

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

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

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

Что мне кажется любопытным и подозрительным, так это то, что устройство sda часто имеет очень высокую загрузку, даже если оно содержит только ОС. Я ожидал, что этот виртуальный диск будет простаивать почти все время. Система не меняет местами согласно "бесплатно" и "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

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

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, если вам не нужно.