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

Высокая запись на диск не указана в iotop

У меня проблемы с большим количеством операций ввода-вывода на моем сервере Debian 7.3 (среднее время ожидания ввода-вывода до 7 секунд). Я попытался выяснить причину этого, используя iotop -o. Теперь я вижу странный сон: iotop сообщает мне вверху «Total DISK WRITE: 32,46M / s». Но в списке задач я не вижу ни одного процесса, который столько записывает на диск. Самыми высокими являются два mysql-процесса со скоростью 90K / s и 8K / s и процесс kjournald. Все три котируются на 99,99% IO. # Если я добавлю всю скорость записи, я не смогу приблизиться к 32 МБ / с.

Экран iotop:

Что здесь не так? Я думаю, что запись 32,46 МБ / с является правильной, потому что в это время мой веб-сервер имеет большое время загрузки страницы, вероятно, из-за большого количества операций ввода-вывода. Но почему «большие задачи», которые используют такую ​​большую емкость, не указаны в списке ниже?

Изменить: я также могу отсортировать его по записи на диск, и я также получаю странные результаты, например:

если вы установите более новый iotop (например, 0.6.x из wheezy-backports), он покажет вам как «общее», так и «фактическое» значения. И страница руководства дает объяснение

Кроме того, общая пропускная способность ввода-вывода, считываемая и записываемая в течение периода выборки, отображается в верхней части интерфейса. Значения Total DISK READ и Total DISK WRITE представляют общую пропускную способность чтения и записи между процессами и потоками ядра с одной стороны и подсистемой блочного устройства ядра с другой. В то время как значения Actual DISK READ и Actual DISK WRITE представляют соответствующую полосу пропускания для фактического дискового ввода-вывода между подсистемой блочного устройства ядра и базовым оборудованием (HDD, SSD и т. Д.). Таким образом, итоговые и фактические значения могут не совпадать в любой момент времени из-за кэширования данных и переупорядочения операций ввода-вывода, которые происходят внутри ядра Linux.

Не то чтобы ответ меня полностью удовлетворял, но, по крайней мере, он указывает на возможные причины несоответствия. Это может быть какой-то поток ядра, например метаданные / журналы FS, или кратковременные процессы, которые запускались, выполняли ввод-вывод и умерли до того, как iotop их увидел.

Есть несколько связанных вопросов Вот и Вот. Для отладки, / proc / sys / vm / block_dump может быть полезно найти источник.