错误:ER_CANT_CREATE_THREAD:无法创建新线程(errno 11);

错误:ER_CANT_CREATE_THREAD:无法创建新线程(errno 11);

当服务器 A 运行一个 node.js 应用程序连接到两个独立的 mysqldb 服务器 B 和 C 时,服务器 A 报告以下错误:

Error: ER_CANT_CREATE_THREAD: Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug
    at Handshake.Sequence._packetToError (/home/abc/workspace/node_modules/my$
    at Handshake.ErrorPacket (/home/abc/workspace/node_modules/mysql/lib/prot$
    at Protocol._parsePacket (/home/abc/workspace/node_modules/mysql/lib/prot$
    at Parser._parsePacket (/home/abc/workspace/node_modules/mysql/lib/prot

mysql db 服务器 B 和 C 的 RAM 配置为 192GB、Ubuntu 18.04.3 LTS 服务器、mysql 8,其 mysqld.cnf 文件配置如下:

max_connections = 100000
innodb_buffer_pool_size = 20G
tmp_table_size = 1G
max_heap_table_size = 1G
read_rnd_buffer_size = 1G
thread_cache_size = 100000
open_files_limit = 1000000
table_definition_cache = 40096
table_open_cache = 1000000

有人对这个问题有什么想法。

非常感谢!

答案1

针对这种情况最常见的解决方案之一是更新nprocMySQL 的软限制。您可以这样做:

  1. 打开终端
  2. 编辑限制配置文件:
    sudo vi /etc/security/limits.conf
  3. 查找以以下内容开头的行:
    mysql soft nproc
  4. 将值从默认值更新20484096
    (如果您根本没有看到这样的行,可以将其添加到文件底部mysql soft nproc 4096:)
  5. 保存文件并重启 MySQL

这将提升软件nproc并允许服务器创建更多线程。根据您概述的硬件配置,系统将拥有足够的能力来处理此问题。

希望这能解决您的问题。

相关内容