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

<p>есть ли хорошая утилита командной строки для мониторинга загрузки жесткого диска в linux? что-то вроде <code>top</code>, но затем отслеживание активности диска i.s.o. использование процессора.</p><p>точнее говоря, я подозреваю, что для некоторых серверов (с большой нагрузкой) после нескольких оптимизаций в различных частях программ, которые на нем работают, в настоящее время узким местом является просто регистрация файлов на диске. но мне очень трудно оценить, какой объем трафика могут обрабатывать серверы.</p><p>моим идеальным инструментом было бы то, что печатает "вы используете 35% пропускной способности вашего диска прямо сейчас". любые идеи?</p>

<p>вы можете получить довольно хорошее представление об этом, используя инструмент <code>iostat</code>.</p><pre><code>% 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 </code></pre><p>использование диска указано в последнем столбце. это определяется как</p><blockquote> <p>процент процессорного времени, в течение которого запросы ввода-вывода были отправлены устройству (использование полосы пропускания для устройства). насыщение устройства происходит, когда это значение близко к 100%.</p> </blockquote>

<p> <a href="http://guichaz.free.fr/iotop/">iotop</a> - это версия top, которая показывает, сколько io использует каждый процесс. он находится в стандартных репозиториях ubuntu; я не знаю, находится ли он в rhel или федора, но так и должно быть.</p><p><img src="https://i.stack.imgur.com/cpqs0.png" alt="enter image description here"></p><p>для более старых ядер (скажем, centos 5.x или rhel 5.x), которые не поддерживают iotop, используйте вместо этого topio (документировано здесь: <a href="http://yong321.freeshell.org/freeware/pio.html#linux">http://yong321.freeshell.org/freeware/pio.html#linux</a> . он опирается на/proc // io для статистики io и предоставляет функциональность, аналогичную iotop. для получения дополнительной информации см. ссылку.</p>

<p>как предполагает састанин в комментариях, вы можете напрямую обрабатывать значения, указанные в <code>/sys/block/sda/stat</code> или <code>/proc/diskstats</code>. это может быть полезно, когда ни один из других упомянутых инструментов не доступен, и вы не можете легко установить их.</p><p>например (iiuc) что-то вроде этого (в bash) должно давать количество операций чтения в секунду:</p><pre><code>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 </code></pre><p>смотрите <a href="https://www.kernel.org/doc/documentation/iostats.txt">https://www.kernel.org/doc/documentation/iostats.txt</a> и <a href="https://www.kernel.org/doc/documentation/block/stat.txt">https: // www.kernel.org/doc/documentation/block/stat.txt</a> для документации.</p>

<p>вы должны взглянуть на <a href="http://www.atoptool.nl/index.php">поверх</a> , который объединяет мощь iotop/top/iftop в одном месте и выделяет критические части вашей системы.</p>

<p>я бы рекомендовал взглянуть на инструмент nmon. он покажет вам живую нагрузку по ряду системных параметров, а также записывает данные в файл для последующего просмотра. это бесплатный инструмент <a href="http://www.ibm.com/developerworks/aix/library/au-analyze\_aix/">здесь</a> :</p>

<p>чтобы узнать, какую общую пропускную способность вы можете использовать <code>hdparm -t /dev/sda</code> для проверки производительности буферного кэша (fileio) <code>hdparm -t /dev/sda</code> для проверки производительности чтения устройства</p><p>примеры: мой ноутбук получает 82 мб/с с диска sata и 2 гб/с из кеша. мой декстоп получает 12 гб/с из кэша и 500 мб/с из массива hw raid. я подозреваю, что последние цифры могут быть удвоены на оборудовании серверного класса.</p><p>установите readahead выше 256, у меня лучше работает 4096</p><pre><code>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 </code></pre><p>время чтения 1гб при разных размерах блока и разных опережающих чтениях</p>

<p>стандартным инструментом для отображения загрузки жесткого диска является <code>iostat</code>.</p><p>он не скажет вам, сколько% возрастной пропускной способности диска вы используете, так как он не знает, сколько пропускной способности у вашего диска. в любом случае на вашем диске имеется только указанная производителем цифра для крупных передач непрерывных данных.</p>

<p>я думаю, что rrdtool должен делать то, что вы хотите <a href="http://oss.oetiker.ch/rrdtool/">здесь</a> он использует демон для сброса системных данных, а затем позволяет обрабатывать его так, как вам нравится. я часто использовал его для создания графиков и т.д. для измерения нагрузки на систему.</p>

<p><strong>htop</strong> хороший инструмент для проверки информации о процессе. вы можете добавлять или удалять столбцы, и среди них скорость чтения и записи процессов.</p>