MySQL高CPU使用率

Jud*_*ing 181 mysql cpu-usage

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

CPU负载平均为13.91(1分钟)11.72(5分钟)8.01(15分钟),我的网站流量略有增加.

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

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

Ste*_*iec 250

首先我要说你可能想要关闭持久连接,因为它们几乎总是弊大于利.

其次我要说你要仔细检查你的MySQL用户,只是为了确保任何人都无法从远程服务器连接.这也是一个重要的安全问题.

第三,我想说你想打开MySQL慢查询日志来关注任何花费很长时间的查询,并使用它来确保你没有任何查询锁定密钥表太长时间.

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

SHOW PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)

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

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

你也可能想要给出以下内容,因为它们包含一些好的信息.

使用分析器也是一个非常好的主意.你可以在你想要的时候打开的东西会告诉你你的应用程序正在运行什么查询,是否有重复的查询,他们花了多长时间等等.像这样的一个例子就是我一直在做的事情叫做PHP Profiler,但有很多.如果您正在使用像Drupal,Joomla或Wordpress这样的软件,那么您需要在社区内询问,因为可能存在可用的模块,这些模块允许您获取此信息,而无需手动集成任何内容.

  • 非常感谢,我删除了持久连接,然后设置慢查询日志.我读了日志,大多数查询来自两个表,表没有正确编入索引!这只是大约10分钟,但这是结果:CPU负载平均为0.48(1分钟)0.95(5分钟)2.42(15分钟)非常感谢 (12认同)

Red*_*xel 166

由于这是google for MySQL高CPU使用率或负载的最高职位,我将添加一个额外的答案:

2012年7月1日,当前UTC时间增加了闰秒,以补偿由潮汐引起的地球自转速度减慢.运行ntp(或ntpd)时,第二个被添加到计算机/服务器的时钟中.MySQLd似乎不喜欢某些操作系统的额外秒,并产生高CPU负载.快速解决方案是(以root身份):

$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start
Run Code Online (Sandbox Code Playgroud)

  • 由于原始帖子大约3年前,我怀疑这是原始海报问题的原因.但这是我的问题的原因,并且刚刚救了我 - 谢谢!更多信息:http://blog.mozilla.org/it/2012/06/30/mysql-and-the-leap-second-high-cpu-and-the-fix/ (22认同)
  • 在Ubuntu 12.04上我也有同样的问题和解决方案.解决稍微不同的步骤:service ntp stop && date -s"`date`"&& service ntp start MySQL CPU使用率从50 - 100%立即下降到0 - 1% (5认同)
  • 这可以执行只是为了确保?我的意思是,即使它不是原因,运行它是否安全? (2认同)
  • 2015年7月1日 - 我刚刚在运行Amazon Linux的当前AWS EC2服务器上遇到了这个非常闰秒的错误.在此配置上使用`sudo service ntpd stop`. (2认同)

Row*_*haw 30

如果外部世界可以看到这个服务器,那么它是否有很多请求从外部世界连接(即试图闯入它的人)是值得的.

  • 当有人只是投票而去的时候我讨厌它! (15认同)
  • @MikeKulls不,这不是一个好主意,因为它将成为许多人尝试进入的目标,这将带来高CPU负载 - 因此我的答案是一个可能的原因. (8认同)
  • 我认为这次否决是因为让MySQL对外界可见并不是一个好主意。 (2认同)