Menu Docs
Página inicial do Docs
/

UNIX ulimit Configurações para implantações autogerenciadas

A maioria dos sistemas operacionais do tipo UNIX, incluindo Linux e macOS, fornece maneiras de limitar e controlar o uso de recursos do sistema, como threads, arquivos e conexões de rede por processo e por usuário. Esses "limites" impedem que usuários individuais usem muitos recursos do sistema. Às vezes, esses limites têm valores padrão baixos que podem causar vários problemas durante as operações normais do MongoDB .

mongod e usam threads e descritores de arquivos para rastrear conexões e gerenciar operações internas. Esta seção descreve os padrões gerais de uso de recursos para MongoDB. Use esses números com suas informações de sistema para determinar mongos as ulimit configurações ideais.

Geralmente, todas as instâncias do mongod e mongos:

  • rastreie cada conexão recebida com dois descritores de arquivos e uma conversa.

  • acompanhe cada thread interno ou pthread como um processo do sistema.

  • Descritor de arquivo do 1 para cada arquivo de dados em uso pela instância do mongod.

  • Descritor de arquivo do 1 para cada arquivo de diário utilizado pela instância do mongod.

  • Em conjuntos de réplicas, cada mongod mantém uma conexão com todos os outros membros do conjunto.

mongod O usa threads em background para vários processos internos, incluindo collections de TTL, replicação e verificações de integridade do conjunto de réplicas, o que pode exigir vários recursos adicionais.

Além dos threads e descritores de arquivos para conexões de clientes, mongos deve manter conexões com todos os servidores de configuração e todos os shards, o que inclui todos os membros de todos os conjuntos de réplicas.

Para mongos, considere os seguintes comportamentos:

  • As instâncias do mongos mantêm um pool de conexões para cada shard para que o mongos possa reutilizar conexões e atender rapidamente as solicitações sem precisar solicitar novas conexões.

  • Você pode limitar o número de conexões de entrada utilizando a opção de tempo de execução do net.maxIncomingConnections. Ao restringir o número de conexões de entrada, você pode evitar um efeito cascata em que o mongos cria muitas conexões nas instânciasmongod.

Você pode utilizar o comando ulimit no prompt do sistema para verificar os limites do sistema, como no exemplo a seguir:

$ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 64000
-n: file descriptors 64000
-l: locked-in-memory size (kb) unlimited
-v: address space (kb) unlimited
-x: file locks unlimited
-i: pending signals 192276
-q: bytes in POSIX msg queues 819200
-e: max nice 30
-r: max rt priority 65
-N 15: unlimited

ulimit refere-se às limitações por usuário para vários recursos. Portanto, se sua instânciamongodfor executada como um usuário que também esteja executando vários processos ou vários processosmongod, você poderá ver a contenção desses recursos. O valor processes (ou seja, -u) refere-se ao número combinado de processos distintos e threads de subprocesso.

No Linux, você pode alterar as configurações do ulimit emitindo um comando no seguinte formulário:

ulimit -n <value>

ulimit tem dois tipos:

  • "difícil" ulimit: o número máximo de processos que um usuário pode ter ativos a qualquer momento. Nenhum processo não raiz pode aumentá-lo.

  • "suave" ulimit: o limite imposto para uma sessão ou processo. Qualquer processo pode aumentá-lo até o "difícil" ulimit.

Importante

Um "soft" baixoulimit pode causar can't create new thread, closing connection erros se o número de conexões aumentar demais. Defina ambos ulimit os valores para os valores recomendados.

ulimit modifica os valores "hard" e "soft", a menos que os modificadores -H ou -S sejam especificados ao modificar valores-limite.

Para muitas distribuições de Linux você pode alterar valores substituindo a opção -n para qualquer valor possível na saída de ulimit -a.

Após alterar as configurações do ulimit, você deve reiniciar o processo para aproveitar as configurações modificadas. No Linux, você pode utilizar o sistema de arquivo /proc para visualizar as limitações atuais em um processo de execução.

Dependendo da configuração de seu sistema e das definições padrão, qualquer alteração nos limites do sistema feita com ulimit pode ser revertida após a reinicialização do sistema. Verifique a documentação da distribuição e do sistema operacional para obter mais informações.

Normalmente, você deve começar amongod usando o systemctl, que usa as configurações ulimit:

systemctl start mongod.service

Se você não iniciar o mongod utilizando systemctl, o systemd substituirá algumas das configurações do ulimit. Por exemplo, se você iniciar mongod conforme mostrado no comando a seguir, será usada uma configuração de fatia de usuário (como user-1000.slice) systemd:

mongod --config ~/mongod.conf

Observação

Uma seção de usuário do systemd limita os recursos para os processos do usuário.

Para sistemas macOS que instalaram o MongoDB Community Edition usando o método de instalação Homebrew, o limite de arquivos abertos pode não ser definido automaticamente ao iniciar o MongoDB por meio de brew services. Talvez seja necessário configurar manualmente os valores ulimit.

Para sistemas macOS executando MongoDB Enterprise ou utilizando o método de instalação TGZ, utilize o comando ulimit para configurar osvalores recomendados do . Consulte a documentação do sistema operacional para obter o procedimento preciso para alterar os limites do sistema em execução.

O Red Hat Enterprise Linux e o CentOS 6 e 7 forçam uma limitação de processo máxima separada, nproc, que substitui as configurações do ulimit. Esse valor é definido no seguinte arquivo de configuração, dependendo da versão:

Versão
Valor
arquivo

RHEL / CentOS 7

4096

/etc/security/limits.d/20-nproc.conf

RHEL / CentOS 6

1024

/etc/security/limits.d/90-nproc.conf

Para configurar um valor de nproc para estas versões, crie um arquivo denominado /etc/security/limits.d/99-mongodb-nproc.conf com novos valores de soft nproc e hard nproc para aumentar o limite de processo. Para obter os valores recomendados, consulte Configurações de ulimit recomendadas.

Com o RHEL /CentOS 8, valores nproc separados não são mais necessários. O comando ulimit é suficiente para configurar os valores máximos de processo exigidos no RHEL/CentOS 8.

As configurações a seguir são particularmente importantes para mongod os sistemas mongos e:

  • -f (tamanho do arquivo): unlimited

  • -t (tempo de CPU): unlimited

  • -v (memória virtual): unlimited [1]

  • -l (tamanho bloqueado na memória): unlimited

  • -n (arquivos abertos): 64000

  • -m (tamanho da memória): unlimited [1] [2]

  • -u (processos/tópicos): 64000

Reinicie suas instâncias domongodemongosapós alterar as configurações do ulimit para aplicar as alterações.

  • As conexões de entrada para uma instância do mongod ou mongos exigem dois descritores de arquivo.

  • Para a plataforma macOS, o limite de processo recomendado é 2500, que é o valor máximo configurável para esta plataforma.

Para distribuições Linux que usam o Upstart, você pode especificar limites dentro de scripts de serviço se iniciar instâncias mongod ou como serviços do Upstart. Você pode fazer isso mongos usando limit sequência de instâncias (stanzas).

Especifique as configurações ulimit recomendadas, como no exemplo a seguir:

limit fsize unlimited unlimited # (file size)
limit cpu unlimited unlimited # (cpu time)
limit as unlimited unlimited # (virtual memory size)
limit memlock unlimited unlimited # (locked-in-memory size)
limit nofile 64000 64000 # (open files)
limit nproc 64000 64000 # (processes/threads)

Cada limit stanza define o limite "soft" para o primeiro valor especificado e o limite "hard" para o segundo.

Depois de alterar limit stanzas, certifique-se de que as alterações surtam efeito reiniciando os serviços do aplicativo usando o seguinte formulário:

restart <service name>

Se você iniciar uma instância mongod ou como mongos um systemd serviço, poderá especificar limites na [Service] seção do arquivo de serviço. O arquivo de serviço tem um local /etc/systemd/system/<process-name>.service como.

Você pode definir limites usando diretivas de limite de recursos.

Especifique as configurações ulimit recomendadas, como no exemplo a seguir:

[Service]
# Other directives omitted
# (file size)
LimitFSIZE=infinity
# (cpu time)
LimitCPU=infinity
# (virtual memory size)
LimitAS=infinity
# (locked-in-memory size)
LimitMEMLOCK=infinity
# (open files)
LimitNOFILE=64000
# (processes/threads)
LimitNPROC=64000

Cada diretiva de limite de systemd define os limites "hard" e "soft" para o valor especificado.

Depois de alterar limit stanzas, certifique-se de que as alterações surtam efeito reiniciando os serviços do aplicativo usando o seguinte formulário:

systemctl restart <service name>

Observação

Se você instalou o MongoDB por meio de um gerenciador de pacote como yum ou apt, o arquivo de serviço instalado como parte da sua instalação já conterá estes valores de ulimit.

Observação

Esta seção se aplica apenas aos sistemas operacionais Linux.

O sistema de arquivos /proc armazena os limites por processo no objeto do sistema de arquivos localizado em /proc/<pid>/limits, onde <pid> é o PID ou identificador de processo. Você pode utilizar a seguinte função bash para retornar o conteúdo do objeto limits para um processo ou processos com um nome fornecido:

return-limits(){
for process in $@; do
process_pids=`ps -C $process -o pid --no-headers | cut -d " " -f 2`
if [ -z $@ ]; then
echo "[no $process running]"
else
for pid in $process_pids; do
echo "[$process #$pid -- limits]"
cat /proc/$pid/limits
done
fi
done
}

Você pode copiar e colar esta função em uma sessão de shell atual ou carregá-la como parte de um script. Ligue para a função com uma das seguintes invocações:

return-limits mongod
return-limits mongos
return-limits mongod mongos
[1](,1 2) Se você limitar o tamanho da memória residente em um sistema que executa o MongoDB, o sistema operacional se recusará a atender solicitações de alocação adicionais.
[2] O parâmetro -m para ulimit não tem efeito em sistemas Linux com versões do kernel mais recentes que 2.4.30. Você pode omitir -m se desejar.

Voltar

Configurar o limitador de taxa

Nesta página