Linux du и rsync 100% использование диска
Всякий раз, когда я бегу du -sh
или же rsync
Я использую диск на 100%. Это приводит к появлению медленных запросов MySQL, что обычно приводит к отключению моего сайта.
Какие-нибудь советы или хитрости, как-то использовать их в командах, поэтому приоритет доступа к диску остается за Mysql и другими основными службами?
4 ответа
Да, с ionice
:
ionice -c 3 <pid>
где <pid>
это идентификатор процесса, который вы хотите замедлить. Это установит класс ввода / вывода этой программы в idle
, это означает, что он получит время ввода-вывода, когда больше ничего не просит об этом.
Ты можешь использовать ionice -c3
в качестве префикса для ваших команд, таким образом, эти команды будут выполняться внутри idle
Класс ввода / вывода, означающий, что они получат время ввода / вывода только тогда, когда это не нужно другим процессам. Это требует, чтобы ваша система использовала планировщик ввода-вывода CFQ. В настоящее время это планировщик ввода / вывода по умолчанию в большинстве дистрибутивов Linux.
Однако такое поведение обычно является признаком чего-то другого. Ваш диск почти заполнен? Это вызывает замедление для систем с большим количеством записей, поскольку все имеет тенденцию фрагментироваться. Или у вас есть десятки миллионов маленьких файлов?
У вас есть ядро с включенным PREEMPT? Существуют различные настройки PREEMPT для ядра, которые позволяют избежать блокировок, например, при большой нагрузке на диск (возможно, при некоторых затратах производительности серверных приложений). Это зависит от вашего дистрибутива, сколько включено по умолчанию.
В бэкпортах Debian теперь есть, например, linux-image-rt-amd64, который включает в себя набор патчей PREEMPT_RT реального времени. Этот набор патчей может помочь даже больше, однако у него могут быть свои проблемы...
Запустите что-то вроде этого, чтобы увидеть, что установлено:
# grep PREEMPT /boot/config-2.6.32-5-amd64 <-- in case of a Debian stable amd64 kernel
Результат:
# CONFIG_TREE_PREEMPT_RCU is not set
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
Возможно, вы захотите установить что-то более агрессивное. Посмотрите в документации по ядру, которая поставляется с источником вашего ядра, чтобы увидеть, что будет работать для вас. И проверьте, какие ядра в вашем дистрибутиве могут иметь более агрессивные настройки PREEMPT. Они могут быть предназначены для использования на рабочем столе и / или в режиме реального времени. Но это не значит, что он не будет работать на сервере. При условии, что они являются частью стандартного дистрибутива, они должны получить обычные исправления безопасности.
В дополнение к ionice (1) rsync может выталкивать блоки, необходимые для mysql, из дискового кэша. Вы можете установить исправление rsync с поддержкой fadvise, чтобы избежать помещения материала, считываемого rsync, в кеш.