我有一个运行ZFS的FreeBSD 8系统,MySQL 5.5服务器大约355GB,预计会增长到几TB.
MySQL在/etc/hosts.allow上触发有关“Too many open files”的错误.我们没有明确地使用/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报告的打开文件数量在一段持续时间内保持在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
有关
>这可能与ServerFault上关于Nexenta问题的ZFS有关:
Why is MySQL unable to open hosts.allow/hosts.deny?
>另请参阅FreeBSD论坛上的类似问题:[EMFILE] Too many
open files
解决方法:
检查/etc/login.conf并确定mysql用户分配给哪个登录类.它可能是默认或守护进程.如果要更改用户的限制,请创建一个新类,将用户分配给该类,根据需要更改该类的限制,然后运行“cap_mkdb /etc/login.conf”
如果您尚未阅读此内容,请执行:http://www.freebsd.org/doc/handbook/users-limiting.htm
系统启动时由/ etc / rc启动的进程将分配给守护程序登录类.