我有一个存储服务器运行 Nexenta(OpenSolaris 内核,Ubuntu 用户空间),在 ZFS 存储阵列上使用 MySQL,使用 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 和主机文件,其权限是默认的-rw-r--r-- 1 root root
)。当然,我可以从管理控制台抑制它,但我宁愿深入了解它,仍然允许 mysqld 警告/错误到达管理控制台。
编辑:不仅实际文件描述符完全在合理的限制范围内,即使文件限制提高到 65535 并且始终仅在 hosts.allow/deny 上,问题也仍然存在(立即出现)。
鉴于当时 Nexenta 是基于 OpenSolaris 的,您可能会遇到这个问题。文件描述符限制似乎并没有在整个系统中以一致的方式应用。
你真的在你的设置中使用 hosts.allow/deny 吗?
输出是什么
lsof
样的?