Limitar o uso da memória privada por usuário

3

Estou usando cgroups com o controlador de memória para definir um limite de memória para cada usuário (usando a configuração memory.limit_in_bytes ).

O problema é que essa configuração também contabiliza o uso do cache. Portanto, se o limite é de 1 GB e o usuário apenas faz o download ou copia um arquivo de 1 GB, seus processos são mortos. O que é pior, as páginas em cache permanecem na memória, de modo que o "uso de memória" do usuário permanece próximo de 1 GB, mesmo quando eles não têm nenhum processo em execução.

Naturalmente, isso não faz sentido. Eu só quero limitar o uso total de memória privada (não anônima) por usuário. Como posso conseguir isso?

Como alternativa, faça com que o OOM killer tente descartar as páginas em cache do usuário antes de desativar os processos de eliminação, o que nem mesmo libera as páginas armazenadas em cache.

    
por Vladimir Panteleev 15.03.2013 / 02:49

1 resposta

2

Postando o que eu acho que pode ser uma resposta melhor.

My requirement is preventing one user's runaway process(es) from crashing the entire system.

O Linux já tem um recurso para fazer exatamente isso: o assassino da OOM.

O matador de OOM OOM é executado quando o sistema fica sem memória e favorece processos que consomem muita RAM rapidamente. Também é menos provável que ele mate processos de longa execução / sistema (superusuário).

O killer da OOM pode ser ajustado por meio do ajuste do arquivo /proc/<pid>/oom_score_adj . A configuração é herdada por processos filhos, portanto, você só precisa defini-la no processo raiz de cada usuário. (Veja Documentation / filesystems / proc.txt , seção 3.1)

    
por 15.03.2013 / 10:18