Ho un sistema FreeBSD 8 che esegue ZFS, con un server MySQL 5.5 che è di circa 355 GB e dovrebbe diventare un paio di Terabyte.
MySQL sta attivando errori relativi a "Troppi file aperti" su /etc/hosts.allow
. Non usiamo espressamente /etc/hosts.allow
, ma viene utilizzato da hosts_access (3) ( libwrap.a
), che viene utilizzato da molte cose.
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Ma quando controllo, sembra che non stia colpendo alcun limite reale. Il numero di file aperti riportato da kern.openfiles stays
meno di 40.000 in un periodo prolungato e il nostro limite è sostanzialmente più elevato:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Openfile dovrebbe essere impostato su illimitato:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL afferma che dovrebbe essere in grado di aprire handle di file 184320:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
E alcune informazioni dal punto di vista dell'utente MySQL. Ho smesso di mysql e hackerato /usr/local/etc/rc.d/mysql-server
per stampare queste variabili, quindi questo dovrebbe rappresentare l'ambiente MySQL. Si noti che il numero 184320 è coerente con quanto sopra.
# /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, per un facile riferimento, ecco le descrizioni dei sistemi:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
Relazionato
- Ciò è probabilmente correlato a una domanda ZFS su Nexenta su ServerFault: Perché MySQL non è in grado di aprire hosts.allow / hosts.deny?
- Vedi anche questo problema simile sui forum di FreeBSD: [EMFILE] Troppi file aperti
ulimit
nello script di avvio o nell'ambiente shell, ma ciò richiederebbe l'interruzione del database.
cat limits
vedere con cosa sta funzionando mysql. Puoi anche cambiarli al volo (con i kernel più recenti): echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(come root ovviamente)
/proc
non è montato di default su FreeBSD, ma fallo tu stesso sudo mount -t procfs proc /proc
, vedi procfs(5)
per maggiori informazioni. Una volta /proc
montato, guarda il /proc/$PID/rlimit
file