当服务器 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
针对这种情况最常见的解决方案之一是更新nproc
MySQL 的软限制。您可以这样做:
- 打开终端
- 编辑限制配置文件:
sudo vi /etc/security/limits.conf
- 查找以以下内容开头的行:
mysql soft nproc
- 将值从默认值更新
2048
为4096
(如果您根本没有看到这样的行,可以将其添加到文件底部mysql soft nproc 4096
:) - 保存文件并重启 MySQL
这将提升软件nproc
并允许服务器创建更多线程。根据您概述的硬件配置,系统将拥有足够的能力来处理此问题。
希望这能解决您的问题。