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

Ограничить дисковый ввод-вывод, создаваемый одной программой?

Оборудование: один сервер виртуализации. Двойной Nehalem, 24 ГБ ОЗУ, 2 ТБ зеркального HD.

Программное обеспечение: Debian, KVM, virt-manager на сервере с несколькими виртуальными машинами, тоже использующими Linux. Диск 2 ТБ - это большой LVM, каждая виртуальная машина получает логический том и создает на нем свои разделы.

Проблема: одна из программ, запускаемых на одной из виртуальных машин, создает огромную нагрузку на диск. Это никогда не было проблемой, потому что программа никогда не работала на таком мощном оборудовании. Теперь процессоры работают быстро, и в результате получается много операций ввода-вывода. На данный момент мы ничего не можем с этим поделать, потому что инструмент - это черный ящик. С другой стороны, приветствуются быстрые вычисления. Программа создает около 5 ГБ временных файлов, которые перезаписываются во время следующей итерации.

Вопрос: Как мы можем ограничить дисковый ввод-вывод для процесса?

Вы хотите ionice команда. Для приоритета простоя (самый низкий приоритет):

ionice -c3 bash

Вы можете использовать обычный nice , чтобы замедлить приоритет процессора, что, возможно, также ограничит ввод-вывод в качестве побочного эффекта.

Вы также можете ограничить количество FD в программе с помощью ulimit. Это может ограничить максимальное количество открытых файлов, на которое способно приложение, но также может просто сломать его.

Еще один вариант может заключаться в том, чтобы купить кучу дополнительной памяти и сопоставить эти временные файлы с RAM-диском с помощью mount, полностью сняв нагрузку с диска. Конечно, вы можете сделать то же самое, добавив еще один диск для временных файлов.

RHEL6 также поддерживает контрольные группы, что позволяет выполнять более тонкую настройку. Вы также можете попытаться найти это в Debian