Como limitar a RAM de um usuário no Ubuntu? [duplicado]

3

Atualmente tenho um "amigo" que tem uma conta no meu servidor dedicado que está executando o Ubuntu. Não entrando em detalhes, mas ele disse que vai usar ~ 2gb max e ele está usando ~ 10gb. Para a questão. Existe uma maneira de limitar sua conta a um máximo de dizer ... 3gb? Matar o (s) processo (s) também seria bom.

Já fiz algumas pesquisas no google mas ainda não encontrei uma solução: /

    
por madyoda 09.04.2014 / 19:09

1 resposta

1

Há quase certamente uma maneira melhor de fazer isso, provavelmente através de limits.conf , mas eu não sei, então aqui está um hack sujo.

Este comando irá matar todos os processos pertencentes ao usuário terdon que estão usando mais de 3G de RAM:

ps -u terdon -o vsize= -o pid= | 
    while read mem pid; do [ $mem -gt 3145728 ] && kill $pid; 
done

O comando ps -u terdon -o vsize= -o pid= imprimirá o PID e a memória usada (unidades de 1024 bytes) em cada um dos processos pertencentes a terdon . Obviamente, você deve adaptar isso para usar o nome de usuário do seu amigo. A saída do comando ps é então passada por um loop while que lê o uso de memória e pid e, em seguida, mata o PID se estiver usando mais de 3145728K de memória.

Se você agora adicionar isso como um crontab executado pelo root, ele será executado a cada minuto e eliminará os processos que estão usando mais RAM do que você deseja permitir. Então, adicione esta linha a /etc/crontab :

* * * * * root ps -u terdon -o vsize= -o pid= | while read mem pid; do [ $mem -gt 3145728 ] && kill $pid; done

Como eu disse, isso é deselegante e apenas um hack feio, mas pode ser o suficiente.

    
por 09.04.2014 / 20:12