Linux: limita o consumo de CPU e memória de um grupo de processos

1

Em uma máquina Ubuntu Server moderna, precisamos hospedar cerca de vinte aplicativos da web. (Mais aplicativos seriam adicionados posteriormente.)

Cada aplicativo é um host virtual nginx, que fala com um grupo de processos FCGI idênticos e de vida longa (escritos internamente), via Socket de Domínio Unix.

Os processos FCGI são diferentes para cada aplicativo da web, mas ainda são muito semelhantes entre si (apenas algumas pequenas diferenças de lógica de negócios).

Normalmente, alocaríamos uma máquina virtual Xen para cada aplicativo da web. Mas, neste caso, a sobrecarga de memória é muito grande - os processos são leves e normalmente não afetam uns aos outros ou competem por recursos. Gostaríamos de hospedar tudo isso em uma única VM Xen.

No entanto, há uma pequena chance de que, devido a algum bug imprevisto, um processo FCGI seja desonesto e consuma todo o CPU e / ou memória da máquina, afetando outras aplicações web.

Gostaríamos de isolar os aplicativos da web uns dos outros para minimizar as chances de que os problemas em um aplicativo da web afetassem outras pessoas.

CPU e recursos de memória são as principais preocupações. Seria bom para outras coisas de controle, como IO throughput etc, mas tenho a sensação de que se ficarmos muito pedantes sobre isso, é melhor usar o Xen de qualquer maneira, os custos de memória seriam insignificantes quando comparados ao trabalho de gerenciamento do sistema custos. Na prática, em nosso caso específico, consideramos que outras coisas além de falta de memória e CPU são problemas de baixo risco, e se isso acontecer, aceitaremos que outros aplicativos da Web sofrerão inicialmente.

A questão é: qual é a maneira correta de limitar o consumo de CPU e memória para um grupo de processos no nosso caso?

    
por Alexander Gladysh 28.09.2011 / 09:28

1 resposta

2

Eu não sei qual é a maneira "correta" (e eu suspeito que não há uma). Além de usar uma máquina virtual ...

Você pode limitar o agendamento de um processo usando (re) nice (processos gerados herdam a prioridade de seus pais). Você pode selecionar um processo (ou grupo de processos) para uma única CPU usando o conjunto de tarefas. E vários limites de uso de memória podem ser definidos usando ulimit.

there is a slight chance that due to some unforeseen bug a FCGI process would go rogue and eat all CPU and / or memory

Talvez você deva considerar um cão de guarda?

Dependendo do volume de tráfego e das necessidades de desempenho, talvez usar uma CGI em vez de FCGI seja uma ideia?

    
por 28.09.2011 / 10:20