Como limitar o uso de tempo e memória de processos no Linux
O script timeout é um programa útil de monitoramento de recursos para limitar o consumo de tempo e memória de processos no Linux. Ele permite que você execute programas sob controle e imponha limites de tempo e memória, encerrando o programa caso esses parâmetros sejam violados.
Não é necessária instalação, basta executar um comando junto com seus argumentos usando o programa timeout e ele monitorará o consumo de memória e tempo do comando, interrompendo o processo caso ultrapasse os limites, e avisará com o pré-definido mensagem.
Para executar este script, você deve ter o Perl 5 instalado em seu sistema Linux e o sistema de arquivos /proc montado.
Para verificar a versão instalada do Perl em seu sistema Linux, execute o seguinte comando.
perl -v
Em seguida, clone o repositório timeout em seu sistema usando o comando git, depois vá para o repositório local usando o comando cd e invoque-o como um comando normal do Linux.
cd ~/bin
git clone https://github.com/pshved/timeout.git
cd timeout
Vejamos agora como funciona o script timeout.
Limitação básica de memória (100M de memória virtual):
Este primeiro exemplo mostra como limitar o uso de memória de um processo a 100M de memória virtual, usando o sinalizador -m
. A unidade padrão de memória é kilobytes.
Aqui, o comando stress-ng executa 4 estressores de memória virtual (VMS) que se combinam para usar 40% da memória disponível por 10 minutos. Assim, cada estressor utiliza 10% da memória disponível.
./timeout -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
Considerando a saída do comando timeout acima, os processos de trabalho stress-ng foram encerrados após apenas 1,16 segundos. Isso ocorre porque o consumo combinado de memória do VMS (438660 quilobytes) é maior que o uso permitido de memória virtual para stress-ng e seu filho processos.
Limitação básica de tempo do processo:
Para ativar a limitação de tempo do processo, use o sinalizador -t
conforme mostrado.
./timeout -t 4 stress-ng --vm 4 --vm-bytes 40% -t 10m
No exemplo acima, quando o tempo stress-ng CPU+SYS excede o valor definido de 4, os processos de trabalho são eliminados.
Limitando o tempo e a memória do processo
Você também pode limitar a memória e o tempo de uma só vez, como segue.
./timeout -t 4 -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
O tempo limite também oferece suporte a algumas opções avançadas, como --detect-hangups
, que permite a detecção de desligamentos.
./timeout --detect-hangups -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
Você pode monitorar o limite de memória RSS (tamanho do conjunto residente) usando a opção --memlimit-rss
ou -s
.
./timeout -m 100000 -s stress-ng --vm 4 --vm-bytes 40% -t 10m
Além disso, para retornar o código de saída ou sinal+128 de um processo, use a opção --confess
ou -c
conforme mostrado.
./timeout -m 100000 -c stress-ng --vm 4 --vm-bytes 40% -t 10m
Para obter mais informações e exemplos de uso, consulte o repositório timeout do Github: https://github.com/pshved/timeout.
Você também pode achar os seguintes artigos relacionados igualmente úteis:
- Como encontrar os 15 principais processos por uso de memória com ‘top’ no modo em lote
- CPUTool – Limite e controle a utilização da CPU de qualquer processo no Linux
- Como limitar o uso da CPU de um processo no Linux com a ferramenta CPULimit
O script timeout é um programa simples de monitoramento de recursos que essencialmente restringe o tempo e o consumo de memória dos processos no Linux. Você pode nos dar feedback sobre o script timeout através do formulário de comentários abaixo.