我试图确定在 MySQL 开始响应太多连接近一个小时的服务器上发生了什么,然后我们不得不重新启动服务器,因为 MySQL 不会自行重新启动,我们也不能杀死它。
所以我的问题是,一旦 MySQL 服务器/实例达到其最大连接数,它会拒绝连接直到重新启动,还是会在连接数降至最大值以下时自动允许更多连接?
尽管该站点有一些页面连接到 MySQL 很长一段时间,并且查询有时需要超过 30 秒才能完成,但我会假设一旦完成,即使负载非常高(无论如何对于这个站点)MySQL 会一旦负载再次减少,就会继续接受新的连接。
MySQL 网站上的太多连接错误页面没有提及应该发生的任何事情。
max_connections 选项是指同时连接的最大数量。如果您的服务器有性能问题,那么您可能有很多脚本在等待免费连接,并在它们可用时立即获取它们。
您还应该监视
sudo netstat -anp | grep mysqld
以查看实际打开了多少连接。我最喜欢爬行服务器的原因当然是抖动。将一个配置乐观的 Apache、一个需要大量内存的 web 应用程序和突然出现的一群用户结合起来,你就会得到一个不断交换的服务器。在单盘设置中,这也会减慢无法获得足够 RAM 以有效工作的 MySQL。所以它也开始打光盘。另外:等待用户刷新 -> 另一个 webapp 实例 -> 另一个保持忙碌太久的连接。使用
vmstat 10
(忽略第一行,这是正常运行时间历史记录)并查找交换条目(以 KiByte/s 为单位)。生产中的交换不是很好(TM)。