当我在 /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
您是否在 my.cnf 中将其指定为open_files_limit
或open-files-limit
?在配置文件中它应该是open-files-limit
。
答案2
选项 1:您可以尝试lsof
在 MySQL 的 pid 上运行,并通过管道传输到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>
注意这一点,因为这个数字ulimit -n
是所有进程的 shell 的总和,所以你不希望把它设置得太高。
如果您看到这个数字慢慢增加,您可能需要检查您的代码:存在悬垂引用。
答案3
检查用户 mysql 的限制:
limits -e -U mysql
ulimit -a
- 显示您的用户的限制
如果限制正确&&您使用 Percona MYSQL,则需要在启动脚本中激活限制。
例如在 FreeBSD 中:/usr/local/etc/rc.d/mysql-server
查找字符串:${mysql_limits="NO"}
并替换NO
->YES
附言: 2Janne Pikkarainen 在我的配置 my.cnf 中:open_files_limit = 8192