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

cpulimit, а для нагрузки? Приостановить команду до тех пор, пока средняя загрузка не опустится ниже некоторого значения?

Программа cpulimit на линуксе отлично. Вы можете указать ему ограничить процесс, чтобы он не использовал более X% ЦП. Например, я знаю человека, у которого ноутбук перегревается, если процессор слишком долго работает слишком горячим. При кодировании видео они используют cpulimit для предотвращения полной загрузки ЦП и, следовательно, перегрева. Вы не можете использовать nice чтобы остановить это.

Есть ли что-то подобное для грузить?

В идеале я бы хотел уметь делать loadlimit 4 my-command-here и это начнется my-command-here и каждые X секунд loadlimit проверит (1 минуту) загрузку машины, и если она выше 4, то my-command-here будет приостановлено. Когда нагрузка упадет ниже 4, команда будет приостановлена. Это именно то, что cpulimit кстати.

Такой инструмент существует?

С учетом того, что вы описываете в комментариях, может показаться, что ваша настоящая проблема может быть решена с помощью ionice.

ionice -c 3 -p <pid>

где -p <pid> это pid процесса, который вы хотите перенести, и -c 3 помещает это в idle class, поэтому он получает дисковое время только в том случае, если его никто не хочет. В загруженной системе это может замедлить рассматриваемый процесс, поэтому вы можете поэкспериментировать с разными значениями приоритета в более высоком классе, например

ionice -c 2 -n 6 -p <pid> 

Читать man ionice Больше подробностей.

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