Limitando o uso de memória e minimizando o thrashing de swap no Unix / Linux

3

Eu tenho algumas máquinas que maquinas que uso para executar um grande número de trabalhos onde eu tento limitar o número de trabalhos para não exceder a RAM disponível da máquina. Ocasionalmente, eu calculo erroneamente a quantidade de memória que alguns dos trabalhos demoram e a máquina começa a debater o arquivo de troca. Eu resolvo isso enviando o kill -s STOP para um dos trabalhos para que ele possa ser trocado.

Alguém sabe de um utilitário que monitora processos para um servidor por um nome específico e, em seguida, pausa aquele com o menor consumo de memória é que o consumo total de memória atinge um limite desejado para que os maiores possam ser executados e concluídos um mínimo de espancamento de arquivo de swap? Os processos em pausa precisam ser retomados depois que alguns processos existentes forem concluídos.

    
por camelccc 15.11.2012 / 17:07

1 resposta

1

Dê uma olhada em thrash-protect (daemon escrito em Python)

  • ele não faz exatamente o que você quer, mas identifica o comportamento de troca de trocas em todo o servidor, então tenta identificar os processos que causam isso e envia um sinal STOP para congelá-los.
  • depois, envia um sinal CONT para descongelá-los.

Se você não quiser usar como está, pode ser a base para um script personalizado que pausa o processo com o menor espaço de memória.

Fazendo isso manualmente

Para quem não gosta de uma ferramenta automatizada, basta usar htop para encontrar os processos com maior porcentagem de uso de memória e enviar o sinal STOP com kill -s STOP <pid> . Em seguida, você poderá enviar kill -s CONT <pid> para continuá-los. No entanto, você pode ter que esperar muito tempo para o htop e matar para executar quando o servidor está se debatendo.

O problema

Quando uma máquina está se debatendo devido à pressão da memória, você normalmente verá uma taxa de transferência muito baixa, apesar da baixa utilização da CPU.

Para diagnosticar isso:

  • são necessários dezenas de segundos, ou até minutos, para executar um simples comando de shell?
  • em top ou htop , há alto uso de swap, alta carga média e baixo uso da CPU?
  • existem taxas de permuta / troca elevadas? Execute vmstat 1 e procure valores si e so , particularmente números de 2 a 4 dígitos a cada segundo, sem segundos de troca zero.
por 27.09.2015 / 12:23