欢迎 on it road

NPROC 限制

如果看起来 nproc 限制是原因(CentOS 6 在 /etc/security/limits.conf 中对此设置了一个低限制),那么我们可以通过几种不同的方式增加 nproc 限制。

1. 编辑limits.conf:

我们可以在limits.conf文件中为mysql用户设置限制,例如:

mysql soft nproc 10240
mysql hard nproc 40960

请注意,limits.conf 仅适用于登录 shell,不会影响由 init 或者 systemd 启动的进程。
对limits.conf 的任何更改仅适用于新登录,我们必须注销并登录才能开始新会话。

2. 编辑 mysqld_safe 脚本:

我们也可以简单地在 mysqld_safe 脚本的顶部附近添加一个 ulimit 调用,例如:

$ ulimit -u 40000

问题

Mysql 报错:无法创建新的进程(错误编号 11)。

操作系统错误 11 表示“资源暂时不可用”。
尝试创建新线程时收到此错误的最常见原因是进程的内核对打开的文件描述符实施了限制。
第二个最常见的原因是达到了进程内核对进程/线程数的强制限制。

以下是涉及的因素:

  • 系统范围的限制: sysctl -e fs.file-max && sysctl -e kernel.threads-max
  • 每个进程的限制(在 newshell 中):ulimit -n、grep nofile /etc/security/limits.conf 和 ulimit -u、grep nproc /etc/security/limits.conf。
  • mysqld 中的 open_files_limit 设置(mysql> 显示全局变量,如“open_files_limit”;)。
  • mysqld 中可能影响进程可能使用的打开 FD 和线程数的其他设置(max_connections、thread_cache_size、table_open_cache、table_definition_cache、innodb_open_files 等)

假设事实上我们达到了 open-files-limit,在大多数 Linux 系统上默认为 1024,我们应该能够通过采取以下步骤来避免这个问题:

  1. 通过对 my.cnf 文件进行以下更改来增加 mysqld 中的显式打开文件限制:
[mysqld]
# Here X could be (max_connections+table_cache)*3  OR you could simply set it very high, for example 32000
open-files-limit = X

2.重启mysqld服务:

/etc/init.d/mysql restart
MySQL 服务器错误 Can't Create A New Thread (errno 11)
日期:2020-09-17 00:11:46 来源:oir作者:oir