MySQL - 文件句柄限制
在 Linux 上,单个进程打开的文件句柄的个数是有限制的。如果达到限制就会报”too many open files“。会在系统日志里面记录。
如果是 MySQL 进程,mysql 会报错:[ERROR] Error in accept: Two many open files ,这时候就要排查是否是程序异常导致打开的文件句柄过多,如果是正常的业务增长就需要修改文件句柄的限制。
查看用户句柄限制:
ulimit -n
进程使用的文件句柄查看:
lsof -n | grep [pid]
也可以直接查看进程的 limits 文件
cat /proc/[pid]/limits
修改文件句柄
ulimit -n 65535
这个修改只对当前的 session 生效,终端退出就恢复成原来的样子。因此可以将这个命令添加到 profile 文件里面,在启动终端的时候加载。
在 CentOS 系统上可以修改对应的 limits.conf 文件永久生效:
在/etc/security/limits.conf 文件末尾添加下面内容。
* soft core 102400
* hard core 102400
* hard nofile 10000
* soft nofile 10000
* hard nproc 10000
* soft nproc 10000
*代表 domain,就是全局的意思,可以改成具体的用户名来限制某个用户。soft / hard:这个当中的硬限制是实际的限制,而软限制,是 warnning 限制,只会做出 warning。nofile 代表 max number of opened file,10000:代表最大打开句柄数
mysql 配置中一般是 open_table_cache,max_connections, open_files_limit 三个参数会影响到文件句柄。
open_table_cache 是限制 mysql 开启 table 的 cache file 数,一般 mysql 开一个 table 就会开启 _.frm 和 _.ibd 等文件,因此,这个至少要表数量的 2 倍以上。
max_connections: 最高连接,连接也是会占用文件句柄的。
open_files_limit: 限制打开文件句柄的个数,但是如果系统限制了,这个参数设置比系统限制更大也不会生效的。
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2019/2019-04/mysql_open_files/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。