最近我的服务器CPU一直很高。
CPU负载平均为13.91(1分钟)11.72(5分钟)8.01(15分钟),我的网站流量略有增加。
运行top命令后,我看到MySQL正在使用160%的CPU!
最近我一直在优化表格,我已经切换到持久连接。这会导致MySQL使用大量的CPU吗?
答案 0 :(得分:239)
首先我要说你可能想要关闭持久连接,因为它们几乎总是弊大于利。
其次我要说你要仔细检查你的MySQL用户,只是为了确保任何人都无法从远程服务器连接。这也是一个重要的安全问题。
第三,我想说你想打开MySQL Slow Query日志来关注任何花费很长时间的查询,并使用它来确保你没有任何查询锁定密钥表太长了。
您可以检查的其他一些事情是在CPU负载较高时运行以下查询:
SHOW PROCESSLIST;
这将显示当前正在运行或正在运行的队列中的任何查询,查询是什么以及它正在做什么(如果查询太长,此命令将截断查询,您可以使用SHOW FULL PROCESSLIST查看完整查询查询文本)。
您还需要密切关注缓冲区大小,table cache,query cache和innodb_buffer_pool_size(如果您使用的是innodb表)等所有这些内存分配会对查询性能产生影响,从而导致MySQL占用CPU。
你也可能想要读一遍,因为它们包含一些好的信息。
使用分析器也是一个非常好的主意。你可以在你想要的时候打开的东西会告诉你你的应用程序正在运行什么查询,是否有重复的查询,他们花了多长时间等等。像这样的一个例子就是我一直在做的事情叫做PHP Profiler但是那里有很多人。如果您正在使用像Drupal,Joomla或Wordpress这样的软件,那么您需要在社区内询问,因为可能存在可用的模块,无需手动集成任何内容即可获取此信息。
答案 1 :(得分:162)
如果你谷歌为MySQL高CPU使用率或负载,这是最高职位,我将添加一个额外的答案:
2012年7月1日,当前的UTC时间增加了闰秒,以补偿因潮汐导致的地球自转速度减慢。运行ntp(或ntpd)时,第二个被添加到计算机/服务器的时钟中。 MySQLd似乎不喜欢某些操作系统的额外秒,并产生高CPU负载。快速修复(以root身份):
$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start
答案 2 :(得分:29)
如果外部世界可以看到这个服务器,那么有必要检查它是否有很多请求从外部世界连接(即试图闯入它的人)