mariadb - 网站因 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/)没有帮助...
解决方案
通过打开慢日志进行故障排除,最好使用较低的值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进行分析。(注意:重启后将立即失效。)
推荐阅读
- ios - 使用 Phonegap 构建生成 IPA 时出现错误代码 70
- macos - 多次为mac应用程序上传更新版本没有任何问题,但仍然不可用
- python-3.x - 爬取谷歌翻译 Python
- java - jframe 的背景 contentPane 干扰了它上面的 jpanel
- css - 圣诞灯环效果
- ruby-on-rails - 上传文件时权限被拒绝
- c - 将字符串文字从函数返回到另一个
- php - __destruct 是按其自身运行还是我需要使用 unset() 或 register_shutdown_function() 才能使其工作
- angular - 高级角度路由 - 可以这样做吗?
- excel - 如何根据特定发件人和特定日期使用 vba 将 Outlook 邮件表复制到 Excel