最近,我的服务器CPU性能一直很高。
CPU平均负载为13.91(1分钟)11.72(5分钟)8.01(15分钟),我的站点的流量仅略有增加。
运行完最高命令后,我看到MySQL使用的CPU是160%!
最近,我一直在优化表,并切换到持久连接。这会导致MySQL使用大量CPU吗?
最近,我的服务器CPU性能一直很高。
CPU平均负载为13.91(1分钟)11.72(5分钟)8.01(15分钟),我的站点的流量仅略有增加。
运行完最高命令后,我看到MySQL使用的CPU是160%!
最近,我一直在优化表,并切换到持久连接。这会导致MySQL使用大量CPU吗?
Answers:
首先,我想您可能想关闭持久性连接,因为它们几乎总是弊大于利。
其次,我想您要仔细检查您的MySQL用户,以确保任何人都无法从远程服务器进行连接。这也是要检查的主要安全事项。
第三,我想说您想打开MySQL慢查询日志来关注花费很长时间的所有查询,并使用它来确保您没有任何查询会长时间锁定键表。
您可以检查的其他一些事情是在CPU负载很高时运行以下查询:
SHOW PROCESSLIST;
这将向您显示当前正在运行或正在运行的队列中的所有查询,查询的内容以及其正在执行的操作(如果查询时间太长,此命令将截断查询,您可以使用SHOW FULL PROCESSLIST查看完整的查询文本) 。
您还需要注意缓冲区大小,表缓存,查询缓存和innodb_buffer_pool_size(如果使用的是innodb表)之类的东西,因为所有这些内存分配都会影响查询性能,这可能会导致MySQL吃光CPU。
您可能还想对以下内容进行重新阅读,因为它们包含一些有用的信息。
使用探查器也是一个很好的主意。您可以在需要时启用一些功能,这些功能将向您显示应用程序正在运行的查询,是否存在重复的查询,查询需要多长时间等。类似的示例就是我一直在努力的一个示例。PHP Profiler,但是有很多。如果您使用的是Drupal,Joomla或Wordpress之类的软件,您可能会想在社区中四处询问,因为可能有适合他们的模块,这些模块使您无需手动集成任何内容即可获取此信息。
因为这是如果您在Google上查找MySQL高CPU使用率或负载的热门文章,我将添加一个附加答案:
2012年7月1日,当前的UTC时间增加了a秒,以补偿由于潮汐引起的地球自转缓慢。运行ntp(或ntpd)时,此秒已添加到计算机/服务器的时钟中。在某些操作系统上,MySQLd似乎并不想多花一秒钟的时间,并且会产生很高的CPU负载。快速修复是(作为根):
$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start
date
” && service ntp start MySQL CPU使用率立即从50-100%下降到
sudo service ntpd stop
在此配置上使用。
如果此服务器对外界可见,则值得检查一下是否有大量来自外界的连接请求(例如,试图闯入该服务器的人)