[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操作系统上一般都要设置大些。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix