Запуск процесса в ограниченном количестве ресурсов в Linux
Есть ли способ запустить процесс (например, ls, du, find и т. Д.) В строго ограниченном количестве ресурсов (например, процессор, память, ввод / вывод), кроме использования nice & ionice, поскольку я их не нашел достаточно эффективен в моем случае.
У меня есть рабочий сервер, на котором есть каталоги с огромным количеством файлов, которые нужно удалить, переместить, получить их общий размер и т. Д.
3 ответа
Существует еще один крайний уровень управления процессом, чем (re)nice: chrt. Вы можете установить процесс на SCHED_IDLE. В сочетании с Ionice IDLE это должно сделать работу.
Существует действительно цель отображения устройств, которая, к сожалению, еще не попала в основное ядро, которая дает вам еще больший контроль: ioband
Другой вариант: поместить этот процесс в виртуальную машину. Прямой доступ к VFS возможен в KVM, и вы можете точно определить, сколько В / В получает виртуальная машина.
Вы можете использовать набор задач, чтобы ограничить группу процессов конкретным процессором, и, если вам это нужно, довести его до максимума, что поможет - но он все равно будет работать достаточно быстро, чтобы очистить кеш VFS (если это проблема) и кеш VFS находится за пределами квоты лимитов - но использование лимитов не поможет, так как просто отключает новые процессы, когда они заканчиваются.
На самом деле, если вы хотите медленно обходить дерево в фоновом режиме, вам придется написать некоторый код.
Обратите внимание, что ionice
использование может отличаться в зависимости от указанных вами классов; использование хорошего значения 19 с классом ionice 'idle' хорошо мне сработало в аналогичном случае без чрезмерного увеличения CPU/IO
Вот как вы можете использовать это:
nice -n 19 'command'
ionice -c 3 -p `ps aux | grep command | grep -v grep | awk {'print $2'}`