Mam system FreeBSD 8 z systemem ZFS, z serwerem MySQL 5.5, który ma około 355 GB i ma wynieść kilka terabajtów.
MySQL powoduje błędy dotyczące „Zbyt wielu otwartych plików” /etc/hosts.allow
. Nie używamy tego wyraźnie /etc/hosts.allow
, ale jest używany przez hosts_access (3) ( libwrap.a
), który jest używany przez wiele rzeczy.
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Ale kiedy sprawdzam, wydaje się, że osiągam jakieś rzeczywiste limity. Liczba otwartych plików zgłoszonych przez kern.openfiles stays
mniej niż 40 000 w dłuższym okresie, a nasz limit jest znacznie wyższy:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Pliki openfile powinny być ustawione na nieograniczoną liczbę:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL mówi, że powinno być możliwe otwieranie uchwytów plików 184320:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
I niektóre informacje z perspektywy użytkownika MySQL. Zatrzymałem mysql i zhakowałem, /usr/local/etc/rc.d/mysql-server
aby wydrukować te zmienne, więc powinno to reprezentować środowisko MySQL. Zauważ, że liczba 184320 jest zgodna z powyższym.
# /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
I dla łatwego odniesienia tutaj są opisy sysctls:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
Związane z
- Jest to prawdopodobnie związane z pytaniem dotyczącym ZFS na Nexenta w ServerFault: Dlaczego MySQL nie może otworzyć hosts.allow / hosts.deny?
- Zobacz także podobny problem na forach FreeBSD: [EMFILE] Zbyt wiele otwartych plików
ulimit
w skrypcie startowym lub w środowisku powłoki, ale wymagałoby to przerwania bazy danych.
cat limits
zobaczyć, z czym działa mysql. Możesz także zmienić je w locie (z nowszymi jądrami): echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(jako root oczywiście)
/proc
nie jest domyślnie montowany na FreeBSD, ale zrób to sam sudo mount -t procfs proc /proc
, zobacz procfs(5)
więcej informacji. Po /proc
zamontowaniu spójrz na /proc/$PID/rlimit
plik