FreeBSD:“打开的文件过多”,但应该可以打开另外160,000个文件

我有一个运行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启动的进程将分配给守护程序登录类.

上一篇:linux – vim on FreeBSD对箭头键没有正确反应和其他类似vi的行为


下一篇:linux – 为什么这个BSD grep结果与GNU grep不同?