我有一个运行ZFS的FreeBSD 8系统,其中一个MySQL 5.5服务器约为355GB,预计将增长到几TB。
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
有关
- 这可能与ServerFault上有关Nexenta的ZFS问题有关: 为什么MySQL无法打开hosts.allow / hosts.deny?
- 也可以在FreeBSD论坛上看到类似的问题:[EMFILE]打开的文件太多
ulimit
在启动脚本或Shell环境中进行设置,但这将要求我中断数据库。
cat limits
看到mysql正在运行。您也可以动态更改它们(使用更新的内核):(echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
当然是root)
/proc
没有在FreeBSD上默认安装,但是您可以自己使用进行安装sudo mount -t procfs proc /proc
,procfs(5)
有关更多信息,请参见。一旦你已经/proc
安装,看看/proc/$PID/rlimit
文件