Найти процесс который грузит диск linux

Нагрузка на диски в Linux

Для измерения текущей нагрузки на диски (что происходит, кто куда копирует и прочее) в Linux можно использовать iotop (и здесь же lsof) и iostat. А для тестирования возможностей дисковой системы fio. Несмотря на то, что первое, о чем можно подумать в плане попугаев — это IOPS или же Мб/сек за чтение или запись, обратите внимание на время ожидания. Примерно как если бы вы стояли в очереди в кассу: вас обслужили бы за 2 минуты, но очередь может быть минут на 30. И со стороны наблюдателя ваш процесс обслуживания будет «висеть». Именно так могут ощущать себя клиенты сервера, если время ожидания будет намного превышать время выполнения конкретной задачи. Поэтому определение длинной очереди и задержек часто бывает более важным, чем знать, что ваш диск «вау, может писать 400 Мбит/с». Нагрузка на диск может оказаться в 4000 Мбит/с в течение длительных периодов времени и все это время клиенты сервера будут недовольны.

Я здесь пишу свой опыт, со своим видением и трактовкой. Пожалуйста, учитывайте это.

IOTOP

Посмотреть, какие процессы в настоящее время создают нагрузку на диск удобно смотреть командой iotop:

Здесь видно, что в данный момент mc что-то пишет (а в это время в другом окне я в самом деле копировал кучу файлов на usb-диск в Midnight Commander (он же mc).

Понять, что коипрует mc в данный момент можно узнать командой:

IOSTAT

Пример вывода iostat на незагруженной в данный момент старенькой системе из двух SATA HDD в soft raid 1 (зеркало) mdadm:

Команда выглядела так:

-x — расширенная статистика

-t — выводить время для каждой порции замеров

-m — результаты в Мбайт

5 — интервал замеров 5 секунд.

Если нужны не история, а динамика процесса, попробуйте так:

watch iostat -x -t -m 1 2

В этом выводе r/s и w/s это отправленные к устройству запросы на выполнение (IOPS, которые хотелось бы, чтобы устройство выполнило).

await — время, включающее ожидание выполнения запроса (как если бы вы встали в очередь в кассу и ждали бы, пока вас обслужат).

svctm — время, реально затраченное на выполнение запроса (время «на самой кассе»).

Для обычных SATA дисков нагрузка IOPS где-то до 100-130 вполне выполнимая. В момент проведения замеров запрошенная нагрузка была 40 IOPS, поэтому запрос практически в очереди и не стоял, его обслужили почти сразу (на «кассе» никого не было). Поэтому await практически равен svctm.

Другое дело, когда нагрузка на диск вырастает:

%iowait — простой процессора (время в процентах) от или процессоров, в то время пока обрабатывались запросы. Т.е. в среднем процессор отдыхал почти 50% времени.

%user — загруженность процессора пользовательскими приложениями. По этому параметру видно, например, что в данный период процессор был почти не занят. Это важно, т.к. может помочь отсечь подозрения в тормозах из-за процессора.

Замер сделан во время переноса большого количества писем из одной папки IMAP в другую. Особо обратите внимание на await и svctm. Налицо длинная очередь (отношение await к svctm). Дисковая система (или чипсет, или медленный контроллер SATA, или. ) не справляется с запрошенной нагрузкой (w/s).. Для пользователей в этот момент все выглядело просто — сервер тупит или даже завис.

Читайте также:  Windows 10 как настроить трей

Заранее проверить производительность дисков можно с помощью fio. Также можно примерно оценить на одной машине производительность дисков и понимать, какой уровень «в среднем по больнице» вы можете ожидать. Это, конечно же, не правильно, но оценить все же поможет. Глубже анализировать результаты, а, главное, методики тестов мне пока трудно.

# yum install fio

# apt-get install fio

В общем виде запуск выглядит так:

Файл your.cfg (название произвольное) может быть примерно таким (пример рабочего конфига для теста на чтение):

Буферизацию не используем (buffered=0), чтение не последовательное (rw=randread).

Во время выполнения этого теста (а выполняться тест может доооолго, надоест — Ctrl+C, результаты все равно будут) можно запустить iostat и посмотреть, что происходит:

Обратите внимание на отношение await к svctm: await/svctm = 32,11..11, т.е. можно считать 32. Это и есть iodepth из конфига your.cfg. Теперь проще понять смысл iodepth — мы указываем, насколько хотим в тесте имитировать длинную очередь заданий.

Я не стал ждать два дня, Ctrl+C и вот результат:

Получили 109 iops, что в принципе нормально, диск обычный, SATA.

Источник

Найти процесс который грузит диск linux

#iotop
iotop requires kernel-2.6.18-199.el5 or later, but kernel-2.6.18-194.17.1.el5xen is running

Так что увы.

1.4 , Полностью Анонимный Аноним ( ? ), 21:26, 24/11/2010 [ответить] [﹢﹢﹢] [ · · · ] + / –
а вообще жаль что поломали поддержку iotop’а в CentOS’е или Ubuntu 10.x(по крайней мере в дефолтовом ядре). Мегаполезная тулза, а до этой статьи я думал, что ещё и незаменимая..
  • 2.6 , follow_me ( ? ), 21:40, 24/11/2010 [^] [^^] [^^^] [ответить]
  • + / –
    В смысле ? в Ubuntu 10.x прекрасно работает , да и для Cent придется только ядро пересобрать и будет прекрасно работать
  • 3.10 , Полностью Анонимный Аноним ( ? ), 23:57, 24/11/2010 [^] [^^] [^^^] [ответить]
  • + / –
    > В смысле ? в Ubuntu 10.x прекрасно работает ,

    виноват, на 10.04 работает, но отображается не всё (дефолтное ядро)!

    Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
    TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
    27205 be/4 www-data 0.00 B/s 0.00 B/s ?unavailable? nginx: worker process
    512 be/3 root 0.00 B/s 0.00 B/s ?unavailable? udevd —daemon
    1 be/4 root 0.00 B/s 0.00 B/s ?unavailable? init
    2 be/4 root 0.00 B/s 0.00 B/s ?unavailable? [kthreadd]
    3 rt/4 root 0.00 B/s 0.00 B/s ?unavailable? [migration/0]
    4 be/4 root 0.00 B/s 0.00 B/s ?unavailable? [ksoftirqd/0]
    CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine SWAPIN and IO %

    > да и для Cent придется только ядро пересобрать и будет прекрасно работать

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

    4.13 , pavlinux ( ok ), 01:30, 25/11/2010 [^] [^^] [^^^] [ответить] + / –
    > обновлять ядро нынче надо часто, а возни много.

    $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.32.y.git;
    $ cd linux-2.6.32.y;
    $ git pull;
    $ [ ! -e .config ] && cat /boot/config-‘uname -r’ > .config;
    $ make oldconfig;
    $ make -j $((‘grep processor /proc/cpuinfo | wc -l’ + 1))
    $ sudo make modules_install
    $ sudo make install;
    $ sudo /sbin/init 6

  • 5.18 , Полностью Анонимный Аноним ( ? ), 00:22, 27/11/2010 [^] [^^] [^^^] [ответить]
  • + / –
    это не всё.
    во-первых неплохо было бы оформить всё это в пакеты.
    и во-вторых как быть с уведомлениями об обновлениях? так у меня плугин для нагиоса висит, к-ый алертит о доступных секурити апдейтах, а если руками ставить ядро, то подписавшись на рассылку можно забыть о нужном обновлении. иными словами, надо ещё изобретать другой плугин, или вы поделитесь:)?
  • 6.19 , pavlinux ( ok ), 02:08, 27/11/2010 [^] [^^] [^^^] [ответить]
  • + / –
    > это не всё.
    > во-первых неплохо было бы оформить всё это в пакеты.
    > и во-вторых как быть с уведомлениями об обновлениях? так у меня плугин
    > для нагиоса висит, к-ый алертит о доступных секурити апдейтах,

    Надо сначала определиться, вам Терафлопы или спокойно спать?
    Одной из стадий терафлопизации 🙂 — это минимизация всего что только есть.
    (в разумных пределах конечно, хотя, зависит от выделенного времени).
    Для безопасности это тоже полезно (тем более нафига вам апдейты софта который не используется.)

    > а если руками ставить ядро, то подписавшись на рассылку можно забыть
    > о нужном обновлении.

    Ядро дистрибное выкидывается. Чтоб действительно обновления не мешались.

    > иными словами, надо ещё изобретать другой плугин, или вы поделитесь:)?

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

    Кроме только vmware, и то модули, которая немного не успевает за ядром.
    Пару раз глюкал nvidia.

    И это учитывая, что у меня в основном RC версии, вот щас 2.6.37-rc3-git2

    Источник

    Выявляем процессы с дисковой активностью в Linux

    TL;DR: статья рассказывает об удобном, быстром и надежном способе определения Linux-программ, записывающих данные на диск, что помогает в выявлении большой или аномально частой нагрузки на дисковую подсистему, а также позволяет оценить накладные расходы файловой системы. Это особенно актуально для SSD в ПК, EMMC и Flash-памяти в одноплатных компьютерах.
    В ходе написания статьи обнаружилось, что запись нескольких килобайт данных на файловую систему BTRFS приводит к записи 3 мегабайт реальных данных на диск.

    Введение

    После 7 месяцев использования нового SSD я решил проверить количество записанных данных, как их сообщает сам диск через SMART.
    19.7 ТБ.
    Всего за 7 месяцев я использовал 13% от гарантированного количества записанных данных, притом, что он настроен в соответствии с рекомендациями по выравниваю разделов и настройке ФС, swap у меня почти не используется, диски виртуальных машин размещены на HDD!
    Это аномально большая цифра, такими темпами гарантийный TBW будет превышен раньше достижения 5-летнего срока гарантии диска. Да и не может мой компьютер писать по 93 гигабайта в сутки! Нужно проверить, сколько данных пишется на диск за 10 минут…

    Total:
    Writes Queued: 24,712, 2,237MiB
    Writes Completed: 25,507, 2,237MiB
    Write Merges: 58, 5,472KiB

    Определение количества записанных данных на дисковое устройство

    Мой SSD хранит количество записанных данных в параметре 241 Total_LBAs_Written, в логических блоках (LBA), а не в байтах. Размер логического блока в моём случае — 512 байт (его можно увидеть в выводе smartctl, в Sector Size). Чтобы получить байты, нужно умножить значение параметра на 512.

    Программа skdump на моём SSD пытается интерпретировать значение Total_LBAs_Written как-то по-своему, из-за чего выводит 1296217.695 TB , что, очевидно, некорректно.

    Чтобы узнать количество записываемой информации на уровне устройства, воспользуемся программой btrace из состава пакета blktrace . Она показывает как общую статистику за всё время работы программы, так и отдельные процессы и потоки (в т.ч. ядра), которые выполняли запись.

    Запустите следующую команду, чтобы собрать информацию за 10 минут, где /dev/sdb — ваш диск:

    btrace позволяет наглядно посмотреть реальное количество записанных данных, но понять, какие именно программы совершают запись, из её вывода сложно.

    Определение программ, производящих запись на накопитель

    Программа iotop покажет процессы, пишущие на диск, и размер записанных данных.
    Наиболее удобный вывод обеспечивают следующие параметры:

    В глаза бросается Firefox, записавший 283 мегабайта за несколько минут работы iotop.

    Определение файлов, в которые производится запись

    Информация о процессе, насилующим диск — хорошо, а пути, по которым производится запись — еще лучше.

    Воспользуемся программой fatrace , которая отслеживает изменения файловой системы.

    Fatrace не умеет показывать количество записанных данных вследствие использования довольно простого отслеживания факта обращения к файлам через inotify.

    Из вывода видно, как хабр сохраняет мою статью в local storage браузера, пока я её пишу, а также расширение Group Speed Dial, которое, как удалось обнаружить именно с помощью fatrace, читает свои данные каждые 30 секунд. Именно читает, а не записывает: CW перед файлом говорит о том, что файл открывается на чтение и запись, с одновременным созданием файла, если он отсутствует (вызывается openat с флагом O_RDWR|O_CREAT), но не говорит, что в файл действительно писалась какая-либо информация.

    На всякий случай, чтобы удостовериться в этом, воспользуемся strace, с фильтром на файловые системные вызовы:

    Нет ни одного вызова write() , что говорит об отсутствии записи в файл.

    Определение накладных расходов файловой системы

    Большая разница в показаниях iotop и btrace натолкнула на мысль протестировать файловую систему путем ручной записи данных в файл и отслеживания показаний btrace.

    Если полностью исключить запись на диск, загрузившись в emergency-режим systemd, и записать вручную пару байт данных в существующий файл, btrace на SSD с btrfs сообщает о записи 3 мегабайт реальных данных. Свежесозданная файловая система флешке размером в 8 ГБ записывает минимум 264 КиБ при записи одного байта.
    Для сравнения, запись пары байт в файл на ext4 оканчивается записью 24 килобайтов данных на диск.

    В 2017 году Jayashree Mohan, Rohan Kadekodi и Vijay Chidambaram провели исследование усиления записи разных файловых систем, их результаты для btrfs и ext4 на при записи 4 КБ соотносятся с моими.

    Источник

    Найти процесс который грузит диск linux

    Статистику по операциям ввода-вывода для дисков можно посмотреть при помощи команд iostat и pidstat. Это поможет понять какие процессы создают набольшую нагрузку на диск в Linux.

    Для работы с этими утилитами придется установить дополнительные пакеты. Инструкция по установка:
    1) Debian\Ubuntu:

    Команда iostat

    Просмотр общей статистики ввода-вывода по дискам можно осуществить командой:

    Пример вывода команды:

    Важными столбцами являются:

    • r/s Число операций чтения с диска в секунду
    • w/s Число операций записи на диск в секунду
    • rkB/s Число прочитанных килобайт за секунду
    • wkB/s Число записанных килобайт за секунду

    Команда pidstat

    Просмотр статистики в разрезе процессов можно посмотреть в интерактивном режиме при помощи команды:

    Пример вывода команды:

    Важными столбцами являются:

    • UID Идентификатор пользователя, от имени которого работает процесс
    • PID Идентификатор процесса
    • kB_rd/s Скорость в килобайтах в секунду, с которой процесс читает с диска
    • kB_wr/s Скорость в килобайтах в секунду, с которой процесс записывает на диск

    Источник

    Читайте также:  Уильям станек windows powershell
    Оцените статью