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