[ERROR] Error log throttle: 'Can't create thread to handle new connection' error(s) suppressed
日常巡查中发现mysql 日志中有大量报错:
2024-09-12 02:51:02 19177 [ERROR] Error log throttle: 3 'Can't create thread to handle new connection' error(s) suppressed
2024-09-12 02:51:02 19177 [ERROR] Can't create thread to handle request (errno= 11)
如下图所示:
问题处理
这个报错一般是因为操作系统中max user process 这个参数设置过小导致的。默认值是1024,一般我们给设置成65536。
max user process 是控制一个用户(例如mysql oracle postgres 用户等)能创建的最大进程数(包括线程),
这个限制是为了防止某个用户占用过多的系统资源,导致系统性能下降甚至崩溃。
详细解释
进程和线程:
进程:是一个独立的执行环境,拥有自己的内存空间和系统资源。
线程:是进程内的一个执行单元,共享进程的内存空间和资源。在 Linux 中,线程通常被视为轻量级进程(Lightweight Process, LWP)。
max user processes 限制:
这个限制指的是单个用户可以创建的最大进程和线程数之和。
如果一个用户创建的进程和线程总数超过了这个限制,系统将拒绝创建新的进程或线程,并返回错误。
查看某个用户已经创建了多少线程和进程:
ps -eLf |grep mysql |wc -l # 线程数
ps -u mysql | wc -l # 进程数
注意这里的mysql是指mysql 这个用户,不是mysqld这个进程
解决办法:
如果不想重启mysql,可以动态修改该值:
echo -n "Max processes=65536:65536" > /proc/pidof mysqld/limits
注意:pidof mysqld 是mysqld的pid号,可以通过 ps -ef |grep mysqld 查看,如果是多实例,则每个mysqld都要执行一遍。
动态修改完后,修改/etc/security/limits.conf文件使永久生效
vim /etc/security/limits.conf
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
mysql soft nproc 65536
mysql hard nproc 65536
mysql soft nofile 65536
mysql hard nofile 65536
保存退出即可。
注意nproc是控制 max user porcess 值的,nofile是控制文件句柄数的,这两个值在mysql操作系统上一般都要设置大些。