mariadb网站出现“连接过多”错误

时间:2018-06-22 07:47:07

标签: mariadb

我正在高端Centos 7 VPS(16 vCore / 128 GB RAM)上运行单个高访问量网站,并在其上运行Plesk Onyx Centos 7 / MariaDB 10.1 / PHP-FPM 5.6设置。

一切通常都很流畅,快速,但是一年下来,网站因MariaDB的消息“ Too Many Connections”关闭而发生了两次。

我急于恢复网站,但没有启动SHOW PROCESSLIST,就启动了“ service mariadb restart”。

此后,我检查了mariadb日志和Web服务器日志,但没有找到对解决该问题有用的任何东西。

请注意,当它第一次发生时,我在my.cnf中将max_connections值提高到300,并不断监视“ max_used_connections”变量,发现该值从未超过50,所以我猜想它是由于某些DDOS攻击或恶意尝试而发生的

问题:

有关如何解决此问题的任何建议?

如果max_used_connections值接近max_connections值,如何通知我?有什么工具吗?

我正在使用外部pingdom服务检查网站的正常运行时间,但未检测到此类问题(Web响应为200 OK),也未检测到服务器上的netdata实例(https://netdata.io/)帮助...

1 个答案:

答案 0 :(得分:2)

通过打开慢速日志来解决问题,最好为long_query_time设置一个较低的值(例如“ 1”)。可能会出现一些顽皮的查询。

是的,下次再执行SHOW FULL PROCESSLIST。 (注意“ FULL”。)而不是重新启动mysqld,请查找有问题的查询。它在Time中将是最高值之一,并且可能不在Sleep模式下。可能很长,例如ALTER或转储。杀死一个进程可能会解决问题,并且问题可能会在几秒钟内消失。

删除由进程(例如mysqld)“打开”的文件将无济于事-在所有进程都关闭文件之前,不会回收磁盘空间。终止进程将关闭所有打开的文件。某些日志可以使用FLUSH LOGS;处理-尽管可能无济于事,这应该是无害的。

如果您的表是MyISAM,则切换到InnoDB可以避免很多情况下发生表锁定(如果您遇到的是这种情况)。

innodb_buffer_pool_size的值是什么?对于该大小的RAM,大约80G是合理的。

GLOBAL STATUS中可能有一些线索;请参见http://mysql.rjweb.org/doc.php/mysql_analysis#tuning进行分析。 (警告:重新启动后,它将立即失效。)