como limitar o tamanho da memória que um processo pode consumir no linux

3

Eu estou tentando descobrir como limitar o uso de memória do mongo daemon para 4G.

Eu pensei em usar o limits.conf com o memlock, mas não tenho certeza se esse é o jeito certo de fazê-lo.

da página man limits.conf Eu entendi que ulimits são referidos aos usuários e não para processos, e também a definição de "memlock" não está clara para mim:

memlock
  maximum locked-in-memory address space (KB)

Como posso limitar o uso de memória do processo?

    
por smintz 04.09.2011 / 16:30

2 respostas

1

O MongoDB usa arquivos mapeados de memória para todo o armazenamento, parece que você pode limitar o tamanho desses arquivos:

No entanto, se você estiver preocupado com os números de memória grandes exibidos no topo, eles não correspondem (exatamente) ao uso de memória física do Mongo. Parte dessa memória será mapeada em disco, dependendo das configurações do seu cache de io, veja Verificando o uso da memória (MongoDB ) .

    
por 04.09.2011 / 16:47
1

memlock limita o uso de páginas de usuários que não podem ser trocadas, por exemplo páginas enormes. Não é o que você está procurando.

Você não deseja usar ulimit -v , pois com o MongoDB seu VSS incluirá todo o seu conjunto de dados. Você poderia tentar ulimit -m para limitar o RSS, mas isso não funciona no linux 2.6 e mais recente. Mesmo que isso acontecesse, atingir o limite poderia resultar em um comportamento estranho, já que as tentativas do programa de alocar memória falham.

Uma abordagem melhor é usar cgroups . jlebar tem um tutorial sobre isso. As duas coisas principais sobre cgroups vs ulimit é que

  1. Funciona
  2. Quando o uso do RSS se aproxima do limite, os algoritmos normais de recuperação de memória do linux entram em ação. Para o MongoDB, acho que isso resultará na queda de dados armazenados em cache.
por 20.09.2011 / 16:45