У меня есть система FreeBSD 8, работающая на ZFS, с сервером MySQL 5.5, который имеет размер около 355 ГБ и по прогнозам вырастет до пары терабайт.
MySQL вызывает ошибки о "слишком много открытых файлов" /etc/hosts.allow
. Мы явно не используем /etc/hosts.allow
, но он используется hosts_access (3) ( libwrap.a
), который используется многими вещами.
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Но когда я проверяю, кажется, что он не соответствует никаким действительным ограничениям. Количество открытых файлов, о которых сообщалось kern.openfiles stays
менее 40 000 за длительный период, и наш лимит значительно выше:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Для Openfiles должно быть установлено неограниченное количество:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL говорит, что он должен иметь возможность открывать дескрипторы файла 184320:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
И немного информации с точки зрения пользователя MySQL. Я остановил mysql и взломал, /usr/local/etc/rc.d/mysql-server
чтобы распечатать эти переменные, так что это должно представлять среду MySQL. Обратите внимание, что число 184320 соответствует вышеизложенному.
# /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
И, для удобства, вот описания для sysctls:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
связанные с
- Возможно, это связано с вопросом ZFS о Nexenta о ServerFault: почему MySQL не может открыть hosts.allow / hosts.deny?
- Также смотрите эту похожую проблему на форумах FreeBSD: [EMFILE] Слишком много открытых файлов
ulimit
в сценарии запуска или в среде оболочки, но для этого потребуется прервать работу базы данных.
cat limits
увидеть, с чем работает mysql. Вы также можете изменить их на лету (с более новыми ядрами): echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(конечно, с
/proc
по умолчанию не монтируется во FreeBSD, но сделайте это самостоятельно sudo mount -t procfs proc /proc
, procfs(5)
подробнее. Как только вы /proc
смонтировали, посмотрите на /proc/$PID/rlimit
файл