如何在智能告警平台CA触发测试告警
1457
2022-11-09
记一次MySQL 1135错误及解决
公司同事的朋友MySQL库有问题,想让帮忙看看。
1.报错信息:mysql cannot create thread、 mysql无法创建新的线程。
1.第一时间想到是不是连接不够了。实际上连接还未满,排除连接数原因。
2.应为是高并发系统,检查了下数据库参数innodb_thread_concurrency=32,测试是不是这个参数影响,改为0后,没啥用,排除问题
3.查看数据库open_files_limits 发现参数限制打开文件数为5000个,感觉有点不够。(下图为本机的),于是修改open_file_limits参数为65535,修改过程如下。
查看官方文档:open_files_limits mysql官方描述,此参数是全局只读的,不可修改,自动控制的
wanted_files= 10+max_connections+table_cache_size*2;=10+3000+64*2=3138 max_connections*5=15000
open_files_limit 在my.cnf配置时候的值
如果不配置就是wanted_files max_connections*5 和ulimit -n中的最大者
那如何手动修改?找了一会后,需要修改mysql注册服务文件,limitNOFILE参数。修改后需要 systemctl daemon-reload生效。
修改后,重启mysql服务,查看open_files_limits参数,修改成功。
3,修改成功压测,还是1135 ,google几篇文章后,有说MySQL bug的,看了MySQL官方论坛问题,大部分说Ulimit 设置问题,于是检查服务器ulimit设置,发现最大文件打开数5000
ulimit
-a 查看配置
-n最大文件打开数
-u 进程数目:用户最多可启动进程
发现不是特别大,但是也算正常 ulimit -n显示的7000多,可能也有人调整过。于是建议调整为65535重启服务器后,问题依然还在1135,于是怀疑还有什么限制。
网上说有几个地方设置会覆盖limits.conf 配置。里面的配置会覆盖limits.conf,于是让去查找问题服务器,就是没发现这个东西。脑瓜疼。
4.第二天一大早,想想是不是他们操作系统的限制问题是不是在别的地方,于是乎find / - name *-nproc.conf 然而啥都没,于是想想google看看是不是limits.conf 设置不生效,山回路转,柳暗花明,突然看到个博客说sesu操作系统的limits.conf设置了也不生效的。
博客中说:
SUSE 12上增加了systemd的资源控制,其中默认参数为 #DefaultTasksMax=512,限制MySQL打开进程数最大512 ,一下想起来昨晚压测试后看到mysql 连接到512就不动了。
于是操作一波:
service mysql status 没看错,就是限制512,突然有点眉目,改
改成65535
/etc/systemd/system.conf,修改DefaultTasksMax的值为65535,后面的值可根据需要修改,修改后systemctl daemon-reload。
查看是否修改成功:
5.重新压测,1135消失,终于算是解决了,后续的事情就是调整优化参数咯
6.总结,问题出在和线程相关的报错。理解:MySQL 连接到数据库服务,实际上是打开linux的一个文件句柄,从服务器最大文件打开数、用户最多启动线程数入手,排查问题, 历经修改数据库最大文件打开数,服务器最大文件打开数、最大线程数等,最终发现SUSE 12上增加了systemd的资源控制,其中默认参数为 #DefaultTasksMax=512,限制MySQL打开进程数最大512。对于Centos系统会限制的地方在/etc/security/limits.d/下面,*-nproc.conf会覆盖/etc/security/limits.conf配置
发表评论
暂时没有评论,来抢沙发吧~