你最好的选择是增加max_user_connections
。对于服务于三个不同 Web 应用程序(原始 php、WordPress、phpBB)的 MySQL 实例,您可能需要至少 60 的值。
发出这个命令,你会发现你有多少全局连接可用:
show global variables like '%connections%'
您可以像这样找出在任何给定时刻正在使用的连接数:
show status like '%connected%'
您可以像这样找出每个连接在做什么:
show full processlist
如果我是你,我会尝试至少 100 个连接的全局值。如果您无权执行此操作,您的服务提供商应该能够帮助您。它需要在my.cnf
MySQL 的文件配置中完成。不要把它设置得太高,否则你的 MySQL 服务器进程会吞噬你所有的 RAM。
第二种方法允许您将这些整体连接分配给不同的 MySQL 用户。如果您的每个 Web 应用程序都有不同的 MySQL 用户名,那么这种方法将适合您。这种方法写在这里。https://www.percona.com/blog/2014/07/29/prevent-mysql-downtime-set-max_user_connections/
控制这个问题的最终方法更加微妙。您可能正在使用 Apache Web 服务器作为底层技术。您可以减少同时运行的 Apache 任务的数量,以提高吞吐量。那是因为 Apache 将请求排队。如果它有几个任务有效地通过队列,那通常比很多任务更快,因为竞争更少。它还需要更少的 MySQL 连接,这将解决您的直接问题。这在这里解释:Restart Mysql automatically when ubuntu on EC2 micro instance kill it when running out of memory
顺便说一句,像 WordPress 这样的网络应用程序使用持久连接池。也就是说,它们建立与 MySQL 数据库的连接,保持它们打开并重用它们。如果您的应用程序很忙,则每个连接的生命周期应该是几分钟。(基于在几秒内创建和删除数据库连接的过于简化的说法,您的托管服务提供商的支持技术不了解这部分网络应用程序操作的微妙之处。)