FreeBSD:“打开的文件太多”,但应该能够打开另外 160,000 个文件

FreeBSD:“打开的文件太多”,但应该能够打开另外 160,000 个文件

我有一个运行 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

有关的

答案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

相关内容