当我在/etc/security/limits.conf和/etc/mysql/my.cnf中设置open_files_limit = 16k
ulimit -n 16344
但在MySQL中:
show variables like 'open_files_limit'; open_files_limit: 4096
那么mysql如何计算open_files_limit。 有什么地方我应该看?
选项1:您可以尝试在MySQL的pid上运行lsof ,通过pipe道连接到wc -l 。
选项2: ll /proc/<mysql-pid>/fs/
这些会给你打开的文件列表(包括套接字等;一切都是Unix / Linux中的文件)。
打开的文件限制可以在mysql-client用show global varaibles like '%files%'来检查,然后set global variable open_files_limit=<some-larger-number> show global varaibles like '%files%' set global variable open_files_limit=<some-larger-number>
要小心这一点,因为ulimit -n的数字是所有进程的shell的总数,所以你不想把它放得太高。
如果你看到这个数字慢慢增加,你可能想检查你的代码:有悬挂引用。
你在my.cnf中指定了open_files_limit还是open-files-limit ? 在configuration文件中,它应该是open-files-limit 。
检查用户mysql的限制:
limits -e -U mysql
ulimit -a – 显示用户的限制
如果限制正确&&您使用Percona MYSQL然后需要在启动脚本中激活限制。
例如在FreeBSD中: /usr/local/etc/rc.d/mysql-server查找string: ${mysql_limits="NO"}并replaceNO – > YES
PS。 在我的configurationmy.cnf 2Janne Pikkarainen: open_files_limit = 8192