Como aumentar o limite máximo de arquivos abertos no Ubuntu 18.04?

16

Corri ulimit -n 65536, adicionei as seguintes linhas a /etc/security/limits.conf:

*    soft nofile 65536
*    hard nofile 65536
alix soft nofile 65536
alix hard nofile 65536
root soft nofile 65536
root hard nofile 65536

E adicionado session required pam_limits.soa ambos:

  • /etc/pam.d/common-session
  • /etc/pam.d/common-session-noninteractive

E fs.file-max = 65536para /etc/sysctl.d/60-file-max.conf.

Ainda assim, depois de reiniciar e executar ulimit -nminha sessão, recebo apenas 4096 (antes 1024).

o que estou perdendo?

Alix Axel
fonte

Respostas:

12

Do manual:

 -n     The maximum number of open file descriptors (most
        systems do not allow this value to be set)

systemd tem uma opção para isso:

$ more /etc/systemd/system.conf | grep NOFILE
#DefaultLimitNOFILE=

Mas isso também é apenas para as configurações gráficas do usuário. Remova o #e você pode configurá-lo para 65536.

Comentário de Daniel Fernández :

DefaultLimitNOFILE=65536 

também pode ser necessário

/etc/systemd/user.conf 
Rinzwind
fonte
11
Esqueci de mencionar, eu também fiz isso.
Alix Axel
11
@AlixAxel: Esta resposta funcionou para mim, além de * - nofile 16384(eu estava apenas tentando 16384) em /etc/security/limits.conf.
Doug Smythies
O 65k é uma suposição e seria de esperar que haja limites codificados no lado superior do que é permitido. Você pode querer começar inferior como Doug indicado;)
Rinzwind
O que você quer dizer com "Mas isso também é apenas para as configurações gráficas do usuário"?
sinan
11
DefaultLimitNOFILE=65536Também pode ser necessário definir as configurações em #/etc/systemd/user.conf
Daniel Fernández
1

Ubuntu 18.04 passo a passo

Espero que tudo isso ajude, por muito tempo, mas funciona (com provas)

Me deparei com esta discussão enquanto instalava o MongoDb no Ubuntu 18.04

https://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/

Como você pode ver, é bastante antigo, mas funciona para mim.

Aqui está o que eu fiz.

  1. Configurações recomendadas do MongoDb ( https://docs.mongodb.com/manual/reference/ulimit/#review-and-set-resource-limits )

    • -f (tamanho do arquivo): ilimitado
    • -t (tempo da CPU): ilimitado
    • -v (memória virtual): ilimitado [1]
    • -l (tamanho da memória bloqueada): ilimitado
    • -n (arquivos abertos): 64000
    • -m (tamanho da memória): ilimitado [1] [2]
    • -u (processos / threads): 64000
  2. Verifique meus limites atuais

ubuntu @ isdb-stage: ~ $ ulimit -a
tamanho do arquivo principal (blocos, -c) 0
tamanho dos dados seg (kbytes, -d) ilimitado
prioridade de planejamento (-e) 0
tamanho do arquivo (blocos, -f) ilimitado
sinais pendentes (-i) 7873
memória bloqueada máxima (kbytes, -l) 16384
tamanho máximo de memória (kbytes, -m) ilimitado
abrir arquivos (-n) 1024
tamanho do canal (512 bytes, -p) 8
Filas de mensagens POSIX (bytes, -q) 819200
prioridade em tempo real (-r) 0
tamanho da pilha (kbytes, -s) 8192
tempo da CPU (segundos, -t) ilimitado
processos máximos de usuários (-u) 7873
memória virtual (kbytes, -v) ilimitada
bloqueios de arquivo (-x) ilimitados
  1. Anote o que exige mudanças

    • tamanho da memória bloqueada , precisa ser definido como ilimitado.
    • arquivos abertos , precisa ser definido como 64000
    • processos / threads * , precisa ser definido como 64000
  2. O que o ubuntu diz sobre como alterar esses limites?

$ man limits.conf

NOME
   limits.conf - arquivo de configuração para o módulo pam_limits

DESCRIÇÃO
   O módulo pam_limits.so aplica limites ulimit, boa prioridade e número de sessões simultâneas de login às sessões de login do usuário. Esta descrição da sintaxe do arquivo de configuração se aplica ao

       arquivo /etc/security/limits.conf e * .conf no diretório 
       Diretório /etc/security/limits.d.
  1. Parece bastante claro, edite o arquivo /etc/security/limits.conf. Ok, vamos descobrir isso ....

Aqui está o início desse arquivo, e veja ele ainda tem instruções, é claro, lembre-se de que este é um código aberto escrito pelos mocinhos! :)

    vi /etc/security/limits.conf

    # /etc/security/limits.conf 
    #Cada linha descreve um limite para um usuário no formato:                                                                   
    #                                                                                
    #Onde:                                                               
    # pode ser:
    # - um nome de usuário

(Veja você mesmo o arquivo, se quiser obter mais detalhes)
  1. Finalmente, faça as alterações. Como o MongoDb é executado como grupo e usuário do mongodb, seria uma boa ideia aumentar apenas os limites desse usuário. Eu já vi '*' usado aqui e ali, para mim, isso é um risco à segurança. Dá a todos e a todos no servidor esses limites, que podem ser usados ​​para maximizar seu servidor. Então, vamos torná-los apenas para o usuário do mongodb.

Aqui estão as minhas alterações: -

mongodb soft memlock ilimitado
mongodb hard memlock unlimited
mongodb soft nofile 64000
mongodb hard nofile 64000
mongodb soft nproc 64000
mongodb hard nproc 64000
  1. Finalmente, finalmente, lembre-se disso na entrada man limits.conf.

    limits.conf - arquivo de configuração para o módulo pam_limits

    Melhor garantir que o módulo pam_limits esteja carregado, para que tudo isso limite funcione. Para fazer isso, edite /etc/pam.d/common-session. Claro que isso também está na página do manual.

sudo vi /etc/pam.d/common-session

# Adicione isso para garantir que o pam_limits.so esteja carregado.
sessão necessária pam_limits.so

Uma reinicialização mostrará que os limites (para o usuário mongodb) foram aplicados. Se você os aplicou usando '*', poderá verificar sem precisar alternar para o usuário mongodb. Basta executar este comando.

$ ulimit -a

tamanho do arquivo principal (blocos, -c) 0
tamanho dos dados seg (kbytes, -d) ilimitado
prioridade de planejamento (-e) 0
tamanho do arquivo (blocos, -f) ilimitado
sinais pendentes (-i) 7873
memória máxima bloqueada (kbytes, -l) ilimitada
tamanho máximo de memória (kbytes, -m) ilimitado
abrir arquivos (-n) 64000
tamanho do canal (512 bytes, -p) 8
Filas de mensagens POSIX (bytes, -q) 819200
prioridade em tempo real (-r) 0
tamanho da pilha (kbytes, -s) 8192
tempo da CPU (segundos, -t) ilimitado
processos máximos de usuários (-u) 64000
memória virtual (kbytes, -v) ilimitada
bloqueios de arquivo (-x) ilimitados

Como você pode ver, todos os limites, de maneira irrepreensível, estavam nos limites que queríamos.

englishPete
fonte