[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操作系统上一般都要设置大些。
posted @ 2024-09-19 10:44  有形无形  阅读(15)  评论(0编辑  收藏  举报