Eu tenho um sistema FreeBSD 8 executando o ZFS, com um servidor MySQL 5.5 de cerca de 355 GB e projetado para crescer em alguns Terabytes.
O MySQL está desencadeando erros sobre "Muitos arquivos abertos" ativados /etc/hosts.allow
. Nós não usamos expressamente /etc/hosts.allow
, mas é 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 verifico que não estou atingindo nenhum limite real. O número de arquivos abertos relatados kern.openfiles stays
abaixo de 40.000 durante um período prolongado e nosso limite é substancialmente mais alto:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Os arquivos abertos devem ser definidos como ilimitados:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
O MySQL diz que deve ser capaz de abrir identificadores de arquivo 184320:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
E algumas informações da perspectiva do usuário do MySQL. Parei o mysql e cortei /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 referência, aqui estão 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
- Isso está possivelmente relacionado a uma pergunta do ZFS on Nexenta no ServerFault: Por que o MySQL não consegue abrir hosts.allow / hosts.deny?
- Veja também este problema semelhante nos fóruns do FreeBSD: [EMFILE] Muitos arquivos abertos
ulimit
o script de inicialização ou o ambiente do shell, mas isso exigiria a interrupção do banco de dados.
cat limits
ver com o que o mysql está sendo executado. Você também pode alterá-los em tempo real (com kernels mais recentes): echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(como root, é claro)
/proc
não é montado por padrão no FreeBSD, mas faça você mesmo sudo mount -t procfs proc /proc
, veja procfs(5)
para mais informações. Depois de /proc
montar, observe o /proc/$PID/rlimit
arquivo