Eu trabalho em conjuntos de dados em larga escala. Ao testar um novo software, às vezes um script me aparece, pega rapidamente toda a RAM disponível e inutiliza minha área de trabalho. Gostaria de definir um limite de RAM para um processo, para que, se exceder esse valor, ele será eliminado automaticamente. Uma solução específica de idioma provavelmente não funcionará, pois eu uso todos os tipos de ferramentas diferentes (R, Perl, Python, Bash, etc.).
Portanto, existe algum tipo de monitor de processo que me permita definir uma quantidade limite de RAM e interromper automaticamente um processo se ele usar mais?
Respostas:
Detesto ser o cara que responde à sua própria pergunta, mas hoje de manhã encontrei um método alternativo, envolvido em uma pequena utilidade. Isso limitará o tempo da CPU ou o consumo de memória:
https://github.com/pshved/timeout
Estou dando uma chance a este primeiro, mas voto positivo para Amey Jah pela resposta agradável. Vou verificar se este me falha.
fonte
Eu recomendo fortemente que não faça isso . Conforme sugerido por @chrisamiller, a configuração de ulimit limitará a RAM disponível com o processo.
Mas ainda assim, se você estiver insistindo, siga este procedimento.
Salve o seguinte script como
killif.sh
:Agora torne-o executável.
Agora execute este script no terminal. Substitua
PROCID
pela identificação do processo real eSIZE
pelo tamanho em MB.Por exemplo:
Se
SIZE
for 100, o processo será interrompido se o uso da RAM for superior a 100 MB.Cuidado: você sabe o que está tentando fazer. O processo de matar não é uma boa ideia. Se esse processo tiver algum comando de desligamento ou parada, edite o script e substitua o
kill -9
comando por esseshutdown
comando.fonte
Experimente a
prlimit
ferramenta, nautil-linux
embalagem. Ele executa um programa com limites de recursos. Ele usa aprlimit
chamada do sistema para configurar os limites, que são então aplicados exclusivamente pelo kernel.Você pode configurar 16 limites, incluindo:
fonte
Era grande demais para caber em um comentário. Modifiquei o script original de Amey para incluir um
pgrep
, portanto, em vez de precisar inserir manualmente a identificação do processo, você pode excluir apenas pelo nome. Por exemplo,./killIf.sh chrome 4000
mata qualquer processo de cromo que exceda 4 GB no uso de memória.Cuidado para selecionar uma seqüência de caracteres grep estreita e um limite de memória grande o suficiente para não matar desnecessariamente processos não intencionais.
fonte