Как я могу отслеживать загрузку жесткого диска в Linux?

101

Есть ли хорошая утилита командной строки для мониторинга загрузки жесткого диска в Linux? Нечто подобное, topно затем мониторинг активности диска iso cpu.

В частности, я подозреваю, что для некоторых серверов (с большой нагрузкой) после нескольких оптимизаций в различных частях программ, которые на нем работают, в настоящее время узким местом является просто регистрация файлов на диске. Но мне очень трудно оценить, какой объем трафика могут обрабатывать серверы.

Моим идеальным инструментом было бы то, что печатает «Вы используете 35% пропускной способности вашего диска прямо сейчас». Есть идеи?

Pieter
источник
1
Идеальный вопрос, это именно то, что я искал =)
rafa.ferreira
Можно читать sysfs напрямую, например /sys/block/sda/stat. Поле # 1 дает общее количество операций чтения, поле # 5 - общее количество операций записи, поле # 9 - количество выполняемых операций ввода-вывода. Подробнее см. В kernel.org/doc/Documentation/iostats.txt Значения без знака долго и могут переноситься.
Састанин
Это очень хороший вопрос, потому что мы всегда боремся с этой проблемой на серверах Plesk. Однако чего не хватает, так это how do you do it with SNMP?. Это нормально, чтобы войти и проверить вещи, но действительно нужны исторические данные.
Евгений ван дер Мерве
unix.stackexchange.com/questions/55212/…
Сиро Сантилли 新疆 16 中心 法轮功 六四 事件

Ответы:

83

Вы можете получить довольно хорошую оценку этого с помощью iostatинструмента.

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

Использование диска указано в последнем столбце. Это определяется как

Процент процессорного времени, в течение которого запросы ввода-вывода были отправлены устройству (использование полосы пропускания для устройства). Насыщение устройства происходит, когда это значение близко к 100%.

Дейв Чейни
источник
3
В каком пакете это находится в Debian, если есть? apt-cache dumpничего не сделал для iostat
hBy2Py
9
@Brian: это в пакете sysstat (через yum в любом случае ...)
Джо,
Не могу найти это на RHEL 6.5. Это доступно для RHEL?
Хазок
Может ли это работать без продолжения с задержкой? Попытка запустить один экземпляр, чтобы получить данные, получает, по-видимому, тот же номер, что и не может брать образцы ???
Уилф
@Hazok Это часть RPM-пакета sysstat для RHEL 6.5.
The General General
81

iotop - это версия top, которая показывает, сколько IO использует каждый процесс. Это в стандартных репозиториях Ubuntu; Я не знаю, в RHEL или в Fedora, но так и должно быть.

введите описание изображения здесь

Для более старых ядер (скажем, CentOS 5.x или RHEL 5.x), которые не поддерживают iotop, используйте вместо этого topio (документировано здесь: http://yong321.freeshell.org/freeware/pio.html#linux . Используется / proc // io для статистики io и предоставляет функциональность, аналогичную iotop. Дополнительную информацию смотрите по ссылке.

Тим Хоулэнд
источник
1
В самом деле, он не установлен по умолчанию в Ubuntu, поэтому можно получить следующее: sudo apt-get install iotop, чтобы получить его
Моше
1
Для iotop требуется ядро ​​выше 2.6.20, что, к сожалению, исключает RedHat el4 и el5.
Дейв Чейни
2
Начиная с RedHat 5.4, биты, необходимые для работы iotop, были портированы. Наслаждайтесь!
Дейв Чейни
Это в Fedora :).
Джей
13

Как предполагает Састанин в комментариях, вы можете напрямую обрабатывать значения, указанные в /sys/block/sda/statили /proc/diskstats. Это может быть полезно, когда ни один из других упомянутых инструментов не доступен, и вы не можете легко установить их.

Например (IIUC) что-то вроде этого (в bash) должно давать количество операций чтения в секунду:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

См. Https://www.kernel.org/doc/Documentation/iostats.txt и https://www.kernel.org/doc/Documentation/block/stat.txt для документации.

Скиппи ле Гран Гуру
источник
7

Вы должны взглянуть на atop , который сочетает в себе мощь iotop / top / iftop, все в одном месте, и выделяет важные части вашей системы.

Yvan
источник
5

Я бы рекомендовал взглянуть на инструмент nmon. Он покажет вам живую нагрузку на ряд системных параметров, а также записывает данные в файл для последующего просмотра. Это бесплатный инструмент, доступный здесь :

MikeyB
источник
5

чтобы выяснить, какую общую пропускную способность вы можете использовать hdparm -T /dev/sdaдля тестирования производительности буферного кэша (fileio), hdparm -t /dev/sdaчтобы проверить производительность чтения устройства

примеры: мой ноутбук получает 82 МБ / с с диска SATA и 2 ГБ / с из кеша. Мой декстоп получает 12 ГБ / с из кэша и 500 МБ / с из массива HW RAID. Я подозреваю, что последние цифры могут быть удвоены на оборудовании серверного класса.

установите readahead выше 256, у меня лучше работает 4096

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

время чтения 1ГБ при разных размерах блока и разных опережающих чтениях

user2987
источник
Добро пожаловать в SF. Вы можете использовать подсветку кода в своих сообщениях, вставляя кавычки вокруг строк или вставляя абзацы.
ℝaphink
Две вещи - 1) --setraсейчас -aи 2), hdparm -{T,t}команды выдают только чтение с диска, соответственно strace, поэтому не являются разрушающими. (Применяется стандартная оговорка о советах в Интернете)
i336_
4

Стандартный инструмент для отображения загрузки жесткого диска iostat.

Он не скажет вам, сколько% возрастной пропускной способности диска вы используете, так как он не знает, сколько пропускной способности у вашего диска. В любом случае на вашем диске имеется только указанная производителем цифра для больших объемов передачи непрерывных данных.

Альнитак
источник
3

Я думаю, что RRDtool должен делать то, что вы хотите, здесь он использует демон для сброса системных данных, а затем позволяет обрабатывать его так, как вам нравится. Я часто использовал его для создания графиков и т. Д. Для измерения нагрузки на систему.

PixelSmack
источник