我有一个运行 ZFS 的 FreeBSD 8 系统,以及一个 MySQL 5.5 服务器,容量约为 355GB,预计将增长到几 TB。
MySQL 在/etc/hosts.allow
.我们没有明确使用/etc/hosts.allow
,但它被使用主机访问(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
并且,为了方便参考,这里是 sysctl 的描述:
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] 打开的文件太多
答案1
检查 /etc/login.conf 并找出您的 mysql 用户分配给哪个登录类。它可能是默认的或守护进程。如果您想更改用户的限制,请创建一个新类,将您的用户分配给该类,根据需要更改该类的限制,然后运行“cap_mkdb /etc/login.conf”
如果您还没有阅读本文,请执行以下操作:http://www.freebsd.org/doc/handbook/users-limiting.htm
系统启动时由 /etc/rc 启动的进程被分配给守护进程登录类。
答案2
在某些操作系统上,设置限制是为了避免普通用户出现安全问题,您应该考虑阅读man limits.conf
此文件中的内容定义每个进程的限制,例如最大线程数或最大打开文件数。限制使用面可能来自那里。
/etc/security/limits.conf