首页 > 解决方案 > 网站因 mariadb “连接过多”错误而关闭

问题描述

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

一切通常都很顺利和快速,但该网站在一年中发生两次,并出现来自 MariaDB 的“Too Many Connections”消息。

由于急于恢复网站,我启动了“service mariadb restart”,但实际上并未启动 SHOW PROCESSLIST。

之后我检查了 mariadb 日志和 Web 服务器日志,但没有发现任何有用的解决问题的方法。

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

问题 :

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

如果 max_used_connections 值接近 max_connections 值,我如何收到警报?任何工具?

我正在使用外部 pingdom 服务来检查网站的正常运行时间,但它没有检测到这种问题(网络响应为 200 OK)以及服务器上的一个 netdata 实例(https://netdata.io/)没有帮助...

标签: mariadb

解决方案


通过打开慢日志进行故障排除,最好使用较低的值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进行分析。(注意:重启后将立即失效。)


推荐阅读