Recentemente precisei aumentar o número de arquivos abertos (open files) de uma máquina Debian, porém ao editar o arquivo /etc/security/limits.conf, os valores não eram alterados, mesmo depois de reiniciar. Essa dica, funciona nas versões 5 e 6 do Debian.
Para verificar qual é o valor máximo de open files, utiliza-se o comando ulimit -a (todas as informações) ou o comando ulimit -n (somente o valor de open files). A saída do ulimit -a de um sistema padrão é assim:
Essa opção nos mostra qual é o máximo de arquivos abertos simultaneamente.core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
1024 arquivos simultâneos não é suficiente?
Depende, imagine um servidor web com mais de 1024 acessos simultâneos, para cada conexão efetuada, 1 File Descriptor é alocado, e esse limite é atingido rapidamente, e a máquina começa com muitos sintomas estranhos.....
Beleza, partindo desse ponto, fica fácil, é só ir no /etc/security/limits.conf e adicionar a opção nofile dessa forma:
* soft nofile 16384Onde:
* hard nofile 32768
* = Todos os usuários
soft = limite padrão
hard = limite máximo
16386/32768 = valores do File Descriptors
E qual o problema?
Quando o o arquivo era alterado, serviços eram iniciados com o valor padrão de File Descriptors (1024)
Solução:
o arquivo /etc/pam.d/common-account é o arquivo responsável pelas configurações de login de todos os serviços.
No final do arquivo insira:
session required pam_limits.soBasta um restart na máquina para que essa solução funcione.
Uma coisa que notei foi: o usuário root não entrava nas regras do limit, ficava no padrão, a solução foi adicionar o usuário root no limits.conf como no exemplo abaixo:
root soft nofile 16384
root hard nofile 32768
* soft nofile 16384
* hard nofile 32768
É isso, qualquer coisa enviem um e-mail:
Muito obrigado cara, estava precisando muito disso... Procurei em vários lugares, porém nenhum não simples e objetivo quanto o seu.
ResponderExcluirEstou com problemas em um cliente da cidade que tem um fluxo enorme no site, e o limite de 1024 estava acabando com meus cabelos! Graças a você consegui resolver.
Só uma dúvida, a questão de max memoria alocada, é necessário alterar ela também? Pois o valor padráo é 32 Kbytes, não é pouco?
felipe@linuxrs.com.br
Dica muito boa, estou tendo dificuldades com uma aplicação em vários clientes e esta dica foi minha salvação.
ResponderExcluirAgora me surgiu um problema, em um dos meus clientes eu fiz exatamente como da forma descrita acima e funcionou após o reboot da maquina com o ulimit -n estava lá o limite que eu escolhi. Mas após um mês o problema com minha aplicação voltou a dar problema quando dei novamente o comando ulimit -n o limit estava em 1024 revisei todos os passos e estava tudo correto reiniciei a maquina algumas vezes mas não adiantou o limit continua em 1024.
Alguma ideia do que possa ser?
wmazuchi@gmail.com