【发布时间】:2015-01-28 12:28:31
【问题描述】:
我们在服务器设置上有很高的并发流量,当流量超过 100+/秒时,我们面临着 PHP 和 MySQL 的“连接过多”问题。我们为应用程序(PHP - 5.4.34)和数据库(MySQL - 5.5.40)有单独的 AWS 节点。
- 在 MySQL 中,我们有 3500 个最大连接数限制,我们也进行了调整 MySQL 中的变量。
- 在高流量时间,DB节点CPU利用率不超过10% 和 RAM 使用低于 4GB。但我们仍然面临着联系 应用程序节点问题。
- 对数据库使用 MyISAM 引擎。
- 使用 mysql_connect 函数并在每次页面完成时关闭连接。
- 我们使用 Monyog 工具监控数据库,因为没有慢查询或队列。
我们搜索了解决方案,但仍然没有找到任何有价值的解决方案。
编辑:
以下是有关我们服务器设置的更多详细信息,我们使用的是 Apache prefork mpm 和下面的当前 mpm 设置。
StartServers 300
MinSpareServers 300
MaxSpareServers 350
服务器限制 1000
MaxClients 1000
MaxRequestsPerChild 99999
PHP 配置:
内存限制:2048
最大执行时间:0
超时:15
keep_alive : 0ff
keep_alive_timeout : 5
AWS EC2
应用节点:
核心:8 个 vCPU
CPU 利用率:89%
内存:30.5GB 中的 2048MB
连接:mysql_connect API
它消耗更多的 CPU 利用率和较低的 RAM 使用率。
编辑:(更新)
我们将连接 API 更新为 PDO 并实现了包中的更改。通过测试运行,我们再次发现了同样的问题。随着 PDO 更新,我们也更改了 Apache 配置。
DB 连接错误: SQLSTATE[HY000] [2003] 无法连接到“172.31.26.180”上的 MySQL 服务器 (99)
【问题讨论】:
-
这个错误是来自 apache/ngix 还是 mysql ?
-
这个错误出现在 apache 应用程序节点上
-
你需要在 apache 中增加你的工人数量。
-
我们通过更改 MySQL 服务器变量来解决“连接过多”问题。我们增加了 'max_connect_errors' 变量。现在我们面临着高 CPU 使用率。对此有何建议?
-
这是一个非常奇怪的错误...听起来您的服务器无法处理您的网站产生的负载,这就是您的 CPU 利用率非常高的原因。长时间运行的查询也可能导致 CPU 使用率高,您可以检查您的慢查询日志。
标签: php mysql database-connection