我有一个运行 Nexenta(OpenSolaris 内核,Ubuntu 用户空间)的存储服务器,其中 MySQL 位于 ZFS 存储阵列之上,使用 innodb_file_per_table 并将 ulimit -n 设置为 8K。mysqltuner.pl 确认文件限制并声称有 169 个文件。
以下命令:
pfiles `fuser -c / 2>/dev/null
表示一个 mysqld 进程有 485 个文件/设备描述符(它们几乎全部用于文件),所以我不知道调整脚本的可靠性如何,但它仍然远小于 8K,并且此列表也未发现其他接近其限制的进程。全局使用的描述符总数约为 1K。
那么什么原因会导致 mysqld 不断流出以下错误?
[date] [host] mysqld[pid]: warning: cannot open /etc/hosts.allow: Too many open files
[date] [host] mysqld[pid]: warning: cannot open /etc/hosts.deny: Too many open files
一切似乎都运行正常,但问题不断涌入管理控制台,并在全新启动时立即启动(不仅可重现,而且始终来自 mysqld 和 hosts 文件,其权限为默认-rw-r--r-- 1 root root
)。当然,我可以从管理控制台抑制它,但我宁愿彻底解决它,并仍然允许 mysqld 警告/错误到达管理控制台。
编辑:不仅实际文件描述符在合理限制范围内,即使文件限制提高到 65535 并且始终仅在 hosts.allow/deny 上,问题仍然存在(立即出现)。
答案1
鉴于 Nexenta 当时是基于 OpenSolaris 的,您可能会遇到这个问题。 它做似乎文件描述符限制并未在整个系统中以一致的方式应用。
您在设置中实际使用了 hosts.allow/deny 吗?
lsof
输出是什么样的?