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