Gerenciamento de lista de processos e terminação automática de processo

Gerenciamento de lista de processos e terminação automática de processo

À medida que o uso/maximização ideal severa continua a crescer, torna -se cada vez mais importante gerenciar bem os processos. Um aspecto disso é a terminação automática do processo. Quando um processo se tornou desonesto e está consumindo muitos recursos, pode ser rescindido automaticamente.

Isso é especialmente adequado para servidores que possuem muitos processos temporários ou descartáveis. Também é adequado para testar servidores que estão executando muitos testes de teste e onde esses testes provam ser instáveis ​​ou fazer com que o software em teste se comporte de forma irregular (por exemplo, usando muita memória)

Neste tutorial, você aprenderá:

  • Como gerenciar processos de maneira automatizada
  • Quais recursos você pode querer monitorar e por quê
  • Exemplo Código mostrando como a terminação automática do processo pode funcionar para problemas de memória de memória
Gerenciamento de lista de processos e terminação automática de processo

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição Linux
Programas Linha de comando Bash, sistema baseado em Linux
Outro Qualquer utilidade que não esteja incluída no shell bash por padrão pode ser instalada usando sudo apt-get install utility-name (ou yum install para sistemas baseados em redhat)
Convenções # - requer que o Linux -Commands seja executado com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

Muita memória! Ou melhor, muito pouca memória!

Existem dois recursos principais que você provavelmente sempre deseja ficar de olho, dependendo do software que está sendo usado em outras partes do servidor, e isso é o uso da memória e o espaço do disco. O uso da CPU também pode entrar em cena, mas é um pouco diferente dos outros. O motivo é que - quando você fica sem espaço em disco, ou fora do espaço da memória, seu servidor começa a reproduzir.

Você pode obter um comportamento indefinido devido à falta de espaço em disco e, se você ficar sem memória, o OOM Killer (fora da memória do mecanismo de matar de processos automáticos) poderá entrar em ação e matar alguns processos, e assim por diante.

Por outro. Se for um programa real de hoging da CPU, pode ser proibitivamente lento, mas na maioria dos casos você ainda será capaz de pelo menos digitar alguns comandos.

Este artigo se concentrará no gerenciamento de processos de hogging de memória: terminação automática de processos que consomem muita memória. Vamos primeiro ver como podemos monitorar o uso do processo de memória:

$ PS -EO PID, PMEM - -Sorte -rss | Cabeça -N10 PID %MEM 406677 19.5 373013 2.1 406515 2.0 406421 1.9 2254 1.8 406654 1.8 406554 1.7 406643 0.9 16622 0.7 


Aqui solicitamos ps Para produzir uma lista dos 10 principais pids. Indicamos que queremos ver todos os processos (-e), e para cada processo, queremos ver o ID do processo (-o PID) e a porcentagem de memória que consome (-o PMEM), ou no total (com opções combinadas: -EO PID, PMEM).

Em seguida, solicitamos que a lista fosse presorta para nós (--organizar) e defina a opção RSS (-RSS) como a especificação de formato longo. Em seguida, capturamos os 10 melhores resultados usando a cabeça -n10. Se quiséssemos ver quais processos estão usando a memória, também podemos adicionar ,Comm para o PID, PMEM lista, ou simplesmente usamos ps -ef | Grep Pid onde pid é o número listado na primeira coluna do ps saída para ver todos os detalhes para um processo.

Agora vamos automatizar isso de tal maneira que os processos que usam mais de 10% da memória são rescindidos automaticamente.

Aviso: não execute isso em nenhum computador sem entender completamente o que ele fará e como isso funciona. As informações aqui são fornecidas como está, sem garantias de qualquer tipo. Você pode encerrar alguns processos que você não queria, ou não deve ser, rescindido.

# ps -eo pmem, pid - -sort -rss | grep '^[\ t]*[1-9] [0-9] \.'| awk 'print $ 2' | xargs -i  kill -9  

Em primeiro lugar, vamos executar isso como raiz, para garantir que tenhamos privilégios suficientes para matar qualquer processo relevante. Observe que trocamos o PMEM (porcentagem de memória) e PID (ID do processo) em torno. Isso torna um pouco mais fácil usar uma expressão regular grep. Nossa expressão regular de grep funciona assim: primeiro, procure um espaço () ou ([…]) um separador (\ t), zero ou mais (*) vezes.

Em seguida, procure o número 1 para 9, pelo menos uma vez (pelo menos uma vez é a frequência padrão, então nenhum símbolo semelhante a * é usado!). Isso é para capturar qualquer número de 10 (começa com 1) para 99 (começa com 9). Em seguida, procuramos outro 0 para 9, Então, no total, estamos pesquisando/grepando os números 10 para 99. Seguimos isso por um ponto literal (\., fazer não usar . Aqui como um único ponto sem barra de barriga de prefixo significa qualquer personagem Em vez de um ponto literal!) para ter certeza de que estamos capturando antes do ponto decimal.

Tomamos então apenas a segunda saída da coluna (imprimir $ 2, com $ 2 sendo a segunda coluna, $ 1 o primeiro etc.) usando Awk. Finalmente, passamos isso para Xargs e escreva Mate -9 em um formato limpo e fácil de entender. Poderíamos ter escrito isso usando uma sintaxe abreviada, mas isso é agradável, limpo e claro. O -EU Indica o que usaremos como nossa corda de substituição (substituindo qualquer ocorrência do mesmo dentro do comando com qualquer entrada Xargs recebeu do cano), neste caso . Eu também recomendo em geral como uma string swap/substituição segura.

Se você gostaria de aprender mais sobre Xargs, Consulte nossos Xargs para iniciantes com exemplos e XARGs com vários rosqueados com exemplos de artigos.

O resultado da execução do comando é que quaisquer processos que usam mais de 10% da memória serão rescindidos imediatamente com um forte Mate -9 comando. Se você gostaria de automatizar o mesmo, poderia colocar isso dentro de um enquanto é verdade; Faça ... feito loop, simplesmente substituindo o .. Com o comando acima, ou você pode adicionar isso ao seu crontab ou a outros scripts de monitoramento pré-existente.



Tenha cuidado ao usar esses comandos, não é sem risco. Se esforce para entender o que você está fazendo o tempo todo! Você também pode gostar de apresentar um 1 minuto dormir Para evitar martelar o servidor com comandos:

# enquanto é verdade; PS -EO PMEM, PID - -Sorte -rss | grep '^[\ t]*[1-9] [0-9] \.'| awk 'print $ 2' | xargs -i  kill -9 ; sono 60; feito 

Dessa forma, estamos monitorando todos os processos na memória regularmente e/ou contínua e encerrando os processos que estão começando a se tornar desonestos, use muita memória etc.

Conclusão

Neste artigo, analisamos o gerenciamento de processos de maneira automatizada usando formatado personalizado ps saída, bem como o Xargs e matar comandos. Também exploramos quais recursos monitorar e por quê. Finalmente, demonstramos como o término automático do processo pode funcionar para problemas de memória de memória no código. Aproveitar!

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Mastering Bash Script Loops
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Coisas para instalar no Ubuntu 20.04
  • Melhores jogos de terminal no Linux
  • Comparando Linux Apache Prefork vs Worker MPMS
  • Guia de solução de problemas gerais GNU/Linux para iniciantes
  • Sistema Linux Hung? Como escapar para a linha de comando e…
  • Gerenciamento de processos de fundo bash
  • Como propagar um sinal para os processos filhos de uma festa…