最近我的服务器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慢查询日志,以监视任何长时间运行的查询,并使用它来确保没有查询锁定关键表太长时间。
您还可以在CPU负载高时运行以下查询来检查其他内容:
SHOW PROCESSLIST;
使用分析器也是一个非常好的主意。可以在需要时打开,显示应用程序正在运行的查询、是否有重复查询以及它们花费的时间等等。这样的示例之一是我正在开发的PHP Profiler,但市面上有许多类似的工具。如果您正在使用Drupal、Joomla或WordPress等软件,您可能需要在社区中寻求帮助,因为它们可能已经为这些软件提供了模块,无需手动集成即可获取此信息。
作为谷歌MySQL高CPU使用率或负载的最热门帖子,我将添加另一个答案:
在2012年7月1日,由于潮汐引起地球自转减缓,一个闰秒被加到当前的UTC时间中。当运行ntp(或ntpd)时,这一秒被添加到您计算机/服务器的时钟中。MySQLd似乎不喜欢某些操作系统上的这个额外的秒,并导致高CPU负载。快速修复方法是(以root身份):
$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start
date
" && service ntp start
MySQL的CPU使用率立即从50%-100%降至0%-1%。 - David Laingsudo service ntpd stop
. - Matt van Andel