У меня есть система 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
файлОтветы:
Проверьте /etc/login.conf и выясните, к какому классу входа назначен ваш пользователь mysql. Это, вероятно, по умолчанию или демон. Если вы хотите изменить ограничения для своего пользователя, создайте новый класс, назначьте своего пользователя этому классу, измените ограничения для этого класса, как вам нравится, а затем запустите "cap_mkdb /etc/login.conf"
Если вы еще не читали это, сделайте: http://www.freebsd.org/doc/handbook/users-limiting.htm
Процессы, запускаемые при запуске системы с помощью / etc / rc, присваиваются классу входа в систему демона .
источник
В некоторых ОС ограничения установлены, чтобы избежать проблем с безопасностью для обычного пользователя, вы должны рассмотреть возможность чтения в
man limits.conf
этом файле. В этом файле определяются ограничения для каждого процесса, такие как максимальное количество потоков или максимальное количество открытых файлов. Лицо ограничения использования может прийти оттуда.
/etc/security/limits.conf
источник