Limitar o uso de memória do comando do terminal (anteriormente uso da CPU) [duplicado]

1

Eu tenho alguns binários que eu quero rodar no terminal, mas se eu rodá-lo, ele rapidamente começa a usar 100% de ambas as CPUs, 100% de memória e todo o congelamento do Linux em poucos segundos. Também não tenho fonte (para acalmá-lo por dentro). Eu pesquisei muito e encontrei e tentei duas soluções possíveis:

  1. nice - não faz literalmente nada, o binário ainda usa 100% de ambas as CPUs e 100% de memória rapidamente depois de executá-lo
  2. ulimit -v faz com que o binário e até mesmo alguns outros comandos (como o git) travem e joguem algum erro

Existe alguma solução fácil para limitar o uso ou a memória da CPU por este binário e permitir que ele seja usado, e. apenas uma CPU ou 50% de ambas as CPUs ou apenas uma pequena quantidade de memória? Eu imagino algo assim:

user@linux:~$ magical_command --limitmemory 1M --command mybinary

ou:

user@linux:~$ magical_command --cpu both --limitcpu 50% --command mybinary

ou:

user@linux:~$ magical_command --cpu one --limitcpu 100% --command mybinary

Atualização: A partir dos comentários abaixo parece que é causado pela memória em vez da sobrecarga da CPU, portanto eu editei a questão, mas eu ainda recomendo a resposta do @dbkeys para quem procura por limite de CPU mágico comando.

Atualização 2: Conforme solicitado nos comentários abaixo: se eu reiniciar meu notebook e só executar o terminal e esse terminal binário, nada mais, meu notebook fica significativamente mais lento, o mouse e o teclado funcionam com atrasos ou jerkily. Mas o binário está funcionando por horas (na maior parte do tempo baixando e compilando dependências), portanto abro o Chrome e faço outras coisas. Se eu abrir o Chrome e deixar o binário rodar em segundo plano, todo o linux congelará e nada, nem mesmo o mouse responderá. Eu tenho que empurrar um switchon off buton por 5 segundos para o desligamento duro. Mas eu não posso simplesmente executá-lo e ir embora, eu quero trabalhar em algumas outras coisas, portanto, eu quero limitar de alguma forma, talvez tanto o binário quanto o Chrome.

    
por aleskva 24.10.2016 / 14:35

1 resposta

2

taskset , pode ser o 'magical_command' que você está procurando. De acordo com a página man:

"... o taskset é usado para definir ou recuperar a afinidade de CPU de um processo em execução dado seu pid ou para iniciar um novo comando com uma afinidade de CPU. A afinidade de CPU é uma propriedade do planejador que" liga "um processo a um determinado conjunto de CPUs no sistema.        O escalonador do Linux honrará a afinidade da CPU e o processo não será executado em nenhuma outra CPU. "

Isso limitaria mybinary a ser executado nos dois primeiros núcleos:

taskset --cpu-list 0,1 mybinary

Infelizmente, não vejo um parâmetro em taskset que também limite o% do tempo de CPU que você deseja alocar para executar mybinary .

    
por dbkeys 24.10.2016 / 14:54