Páginas

quarta-feira, 9 de março de 2011

Aumentando o limite de File Descriptors

Fala pessoal...

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:

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
Essa opção nos mostra qual é o máximo de arquivos abertos simultaneamente.


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 16384
* hard nofile 32768
Onde:

* = 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.so
 Basta 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: