Limitando processos por memória no Linux

1

Precisamos lançar vários processos com fome em um sistema Linux. Esses processos geralmente precisam de vários Go (~ 5Go) de memória para rodar (memória total: 16Go RAM + 2Go swap).

  • Inicialmente, quando o sistema estava ficando sem memória, os processos matadores de OOM matavam, tínhamos que reinicializar o sistema toda vez que acontecia.

  • Em seguida, tentamos usar os parâmetros overcommit_memory (= 2) + overcommit_ratio (= 75), portanto, os processos não são iniciados quando a situação está ficando crítica. Então, não há necessidade de reiniciar o servidor mais. Mas o nosso script de lançamento agora reporta dezenas de erros quando o limite é atingido: os novos processos são imediatamente errados, os processos nunca são iniciados.

  • Então, agora estamos procurando uma solução para lançar "tantos" processos quanto quisermos, e então eles seriam atrasados / pausados ou qualquer coisa, esperando que seus irmãos parassem ... Existe?

por Sleb' 29.11.2013 / 17:33

1 resposta

0

Você pode encontrar a quantidade de memória livre de / proc / meminfo

Você pode suspender qualquer processo enviando-lhe SIGTSTP ( kill -SIGSTP pid ).

Você pode continuar com SIGCONT

É claro que o processo suspenso não libera qualquer memória, simplesmente não consome mais nada até ser retomado, e é claro que você precisa saber que os PIDs dos processos devem ser suspensos - provavelmente fazendo com que eles os gravem em algum lugar no disco. Você não contou o suficiente sobre a sua situação para determinar se isso é suficiente, mas isso deve lhe dar uma direção.

    
por 29.11.2013 / 19:33