最近我的服务器 CPU 一直很高。
CPU 负载平均为 13.91(1 分钟)11.72(5 分钟)8.01(15 分钟),而我的站点的流量仅略有增加。
运行 top 命令后,我看到 MySQL 正在使用 160% 的 CPU!
最近我一直在优化表,我已经切换到持久连接。这会导致 MySQL 使用大量 CPU 吗?
首先我想说你可能想要关闭持久连接,因为它们几乎总是弊大于利。
其次,我想说您要仔细检查您的 MySQL 用户,以确保任何人都不可能从远程服务器进行连接。这也是需要检查的主要安全事项。
第三,我想说你想打开MySQL 慢查询日志来关注任何需要很长时间的查询,并使用它来确保你没有任何查询锁定键表太久。
您可以检查的其他一些事情是在 CPU 负载较高时运行以下查询:
SHOW PROCESSLIST;
这将向您显示当前正在运行或正在运行的队列中的任何查询,查询是什么以及它在做什么(如果查询太长,此命令将截断查询,您可以使用 SHOW FULL PROCESSLIST 查看完整的查询文本) .
您还需要注意诸如缓冲区大小、表缓存、查询缓存和innodb_buffer_pool_size(如果您使用的是 innodb 表)之类的事情,因为所有这些内存分配都会影响查询性能,从而导致 MySQL吃掉CPU。
您可能还希望阅读以下内容,因为它们包含一些很好的信息。
使用分析器也是一个非常好的主意。您可以在需要时打开一些东西,它会显示您的应用程序正在运行哪些查询,是否有重复的查询,它们花费了多长时间等等。我一直在研究的一个例子是这样的PHP Profiler但那里有很多。如果您使用的是 Drupal、Joomla 或 Wordpress 等软件,您可能需要在社区内四处询问,因为可能有可用的模块让您无需手动集成任何东西即可获取此信息。