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
ouhtop
, 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 valoressi
eso
, particularmente números de 2 a 4 dígitos a cada segundo, sem segundos de troca zero.