Meu servidor executa várias dezenas de processos que não estão sob meu controle (principalmente software de monitoramento).
De acordo com os logs do meu aplicativo, algumas vezes alguns dos processos de terceiros tentam alocar muita memória consumindo toda a RAM e swap restantes no sistema. Meu aplicativo Java falha com o OOM nesse caso. Eu posso reproduzir essa situação com um simples script de consumo de memória.
Como não consigo controlar outro software em execução na máquina, decidi limitar a memória disponível para os processos de terceiros usando cgroups. Isso funciona muito bem.
Meu problema é identificar e separar processos do sistema operacional / kernel / críticos dos processos de terceiros.
Neste momento, estou tentando localizar processos de terceiros e colocá-los em um cgroup com memória limitada usando alguns padrões de caminho comuns na linha de comando do processo.
Estou imaginando se seria OK deixar meu aplicativo ser executado no cgroup raiz (memória ilimitada) e colocar TODOS os outros processos, incluindo TODOS OS e processos do kernel, em um cgroup com RAM e SWAP limitados a no máximo 1 GB? (efetivamente sem troca)
Espero que 1GB seja suficiente para executar um sistema operacional RHEL (kernel 2.6.32-279.el6.x86_64) e limitar a RAM disponível a todos os processos do sistema não afetaria a estabilidade do sistema.