У меня есть двоичный файл, который я хочу запустить в терминале, но если я его запустил, он быстро начнет использовать 100% обоих процессоров, 100% памяти и весь Linux замораживание через несколько секунд. Также у меня нет исходного кода (чтобы успокоить его прямо изнутри). Я много гуглил, нашел и попробовал два возможных решения:
nice
- буквально ничего не делает, двоичный файл по-прежнему использует 100% обоих процессоров и 100% памяти быстро после того, как я его запустил ulimit -v
вызывает сбой двоичных и даже некоторых других команд (например, git) и выдаёт некоторую ошибку Есть ли какие-нибудь простое решение для ограничения использования ЦП или памяти этим двоичным файлом и позволить ему использовать, например, только один ЦП или 50% обоих ЦП или только небольшой объем памяти? Я представляю себе что-то вроде этого:
user@linux:~$ magical_command --limitmemory 1M --command mybinary
или:
user@linux:~$ magical_command --cpu both --limitcpu 50% --command mybinary
или:
user@linux:~$ magical_command --cpu one --limitcpu 100% --command mybinary
Обновление: Из комментариев ниже похоже, что это вызвано памятью, а не перегрузкой процессора, поэтому я отредактировал вопрос, но все же рекомендую ответ @dbkeys для тех, кто ищет волшебную команду, ограничивающую процессор.
Обновление 2: Как указано в комментариях ниже: если я перезапускаю свой ноутбук и запускаю только терминал и этот двоичный файл с терминала, ничего больше, мой ноутбук значительно замедляется, мышь и клавиатура работают с задержками или рывками. Но двоичный файл работает часами (большую часть времени загружает и компилирует зависимости), поэтому я открываю Chrome и делаю еще кое-что. Если я открываю Chrome и позволяю двоичному файлу работать в фоновом режиме, весь Linux вообще зависает и ничего, даже мышь не реагирует. Мне нужно нажать кнопку выключения в течение 5 секунд до полного выключения. Но я не могу просто запустить его и уйти, я хочу поработать над другими вещами, поэтому я хочу как-то ограничить, возможно, и этот двоичный файл, и Chrome.
taskset, мог бы быть 'magical_command', который Вы ищете. Согласно его странице справочника:
"... taskset используется, чтобы установить или получить привязку ЦП рабочего процесса, учитывая его pid или запустить новую команду с данной привязкой ЦП. Привязка ЦП является свойством планировщика, которое "связывает" процесс с данным набором центральных процессоров в системе. Планировщик Linux будет соблюдать данную привязку ЦП, и процесс не будет работать ни на каких других центральных процессорах".
Это ограничило бы mybinary для работы первых двух ядер:
taskset --cpu-list 0,1 mybinary
, К сожалению, я не вижу параметр в taskset, который также ограничил бы, какой % времени ЦП Вы хотите выделить его для выполнения mybinary.