MySQL高CPU使用率

最近我的服务器CPU一直很高。

CPU负载平均13.91(1分钟)11.72(5分钟)8.01(15分钟),我的网站只有轻微的stream量增加。

运行顶级命令之后,我看到MySQL正在使用160%的CPU!

最近我一直在优化表,我已经切换到持久连接。 这可能导致MySQL使用大量的CPU?

首先,我想说你可能想closures持续连接,因为它们几乎总是有害无益。

其次,我想说,你要仔细检查你的MySQL用户,只是为了确保任何人都不可能从远程服务器连接。 这也是一个重要的安全事项来检查。

第三,我想说你想打开MySQL慢查询日志来关注任何需要很长时间的查询,并使用它来确保你没有任何查询locking关键表的时间太长。

你可以检查的其他一些事情是在CPU负载很高时运行以下查询:

SHOW PROCESSLIST; 

这将显示当前正在运行或在队列中运行的任何查询,查询是什么以及它在做什么(如果查询太长,此命令将截断查询,则可以使用SHOW FULL PROCESSLIST查看完整的查询文本) 。

您还需要关注像缓冲区大小, 表caching , 查询caching和innodb_buffer_pool_size (如果您使用的是innodb表),因为所有这些内存分配都会影响查询性能,从而导致MySQL吃掉CPU。

因为他们包含一些好信息,您可能也想要给以下一个阅读。

  • MySQL如何使用内存
  • MySQL系统variables

使用探查器也是一个非常好的主意。 当你想要的时候,你可以打开一些东西,这会告诉你你的应用程序正在运行什么样的查询,是否有重复的查询,它们要花多长时间,等等。这样的例子就是我一直致力于调用PHP Profiler,但有很多。 如果您使用的是Drupal,Joomla或Wordpress等软件,您可能需要在社区内进行咨询,因为可能有适合他们的模块,可以让您获得这些信息,而无需手动集成任何内容。

因为这是最高的post,如果你谷歌的MySQL高CPU使用率或负载,我会添加一个额外的答案:

2012年7月1日,当前UTC时间增加了一个闰秒,以补偿由于潮汐而导致的地球自转速度减慢。 运行ntp(或ntpd)时,这一秒被添加到您的计算机/服务器的时钟。 在某些操作系统中,MySQLd似乎不喜欢这个额外的秒,并且产生很高的CPU负载。 快速修复(以root身份):

 $ /etc/init.d/ntpd stop $ date -s "`date`" $ /etc/init.d/ntpd start 

如果这个服务器对外界来说是可见的,那么值得检查一下,是否有大量的连接来自外部世界的请求(即试图进入它的人)