FreeBSD: “Muitos arquivos abertos”, mas deve ser capaz de abrir outros 160.000 arquivos

11

Eu tenho um sistema FreeBSD 8 rodando o ZFS, com um servidor MySQL 5.5 que tem cerca de 355GB e projeta para crescer um par de Terabytes.

O MySQL está acionando erros sobre "Muitos arquivos abertos" em /etc/hosts.allow . Não usamos expressamente /etc/hosts.allow , mas ele é usado por hosts_access (3) ( libwrap.a ), que é usado por muitas coisas.

mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files

Mas quando eu pareço não estar atingindo nenhum limite real. O número de arquivos abertos relatados por kern.openfiles stays abaixo de 40.000 durante um período sustentado e nosso limite é substancialmente maior:

# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191

# ulimit -n
184320

Openfiles deve ser definido como ilimitado:

# grep openfiles /etc/login.conf
    :openfiles=unlimited:\

O MySQL diz que deve ser capaz de abrir identificadores de arquivos 184320:

# mysqladmin variables | grep open_files_limit
| open_files_limit                              |     184320                |

E algumas informações sob a perspectiva do usuário do MySQL. Eu parei o mysql e invadi /usr/local/etc/rc.d/mysql-server para imprimir essas variáveis, então isso deve representar o ambiente MySQL. Observe que o número 184320 é consistente com o acima.

# /usr/local/etc/rc.d/mysql-server.stefantest start
Starting mysql.
cpu time               (seconds, -t)  unlimited
file size           (512-blocks, -f)  unlimited
data seg size           (kbytes, -d)  33554432
stack size              (kbytes, -s)  524288
core file size      (512-blocks, -c)  unlimited
max memory size         (kbytes, -m)  unlimited
locked memory           (kbytes, -l)  unlimited
max user processes              (-u)  5547
open files                      (-n)  184320
virtual mem size        (kbytes, -v)  unlimited
swap limit              (kbytes, -w)  unlimited
sbsize                   (bytes, -b)  unlimited
pseudo-terminals                (-p)  unlimited

E, para facilitar a consulta, veja as descrições dos sysctls:

kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process

Relacionado

por Stefan Lasiewski 04.03.2013 / 20:59

2 respostas

1

Verifique o /etc/login.conf e descubra a qual classe de login seu usuário mysql está designado. É provavelmente padrão ou daemon. Se você quiser alterar os limites do seu usuário, crie uma nova classe, atribua seu usuário a essa classe, altere os limites para essa classe como desejar e então execute "cap_mkdb /etc/login.conf"

Se você ainda não leu isto, faça: link

Os processos iniciados na inicialização do sistema por /etc/rc são atribuídos à classe de login daemon .

    
por 06.11.2013 / 02:21
0

Em alguns sistemas operacionais, os limites são definidos para evitar problemas de segurança para usuários regulares, você deve considerar a leitura de wast no man limits.conf
Este arquivo define os limites por processo, como número máximo de thread ou número máximo de arquivos abertos. O rosto de uso de limitação poderia vir de lá. /etc/security/limits.conf

    
por 27.11.2013 / 11:43

Tags