Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL高CPU使用率_Mysql_Cpu Usage - Fatal编程技术网

MySQL高CPU使用率

MySQL高CPU使用率,mysql,cpu-usage,Mysql,Cpu Usage,最近我的服务器CPU一直很高 CPU负载平均为13.91(1分钟)、11.72(5分钟)和8.01(15分钟),而我的站点的流量只略有增加 运行top命令后,我看到MySQL使用了160%的CPU 最近,我一直在优化表,并切换到持久连接。这可能会导致MySQL使用大量CPU吗?如果外部世界可以看到此服务器,则值得检查它是否有大量来自外部世界的连接请求(即试图入侵的人)首先,我想说,您可能想关闭持久连接,因为它们几乎总是弊大于利 第二,我想说的是,您需要仔细检查您的MySQL用户,以确保任何人都不

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

CPU负载平均为13.91(1分钟)、11.72(5分钟)和8.01(15分钟),而我的站点的流量只略有增加

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


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

如果外部世界可以看到此服务器,则值得检查它是否有大量来自外部世界的连接请求(即试图入侵的人)

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

第二,我想说的是,您需要仔细检查您的MySQL用户,以确保任何人都不可能从远程服务器进行连接。这也是一个需要检查的重要安全问题

第三,我想说的是,您希望打开日志来监视任何需要很长时间的查询,并使用它来确保没有任何查询将键表锁定太久

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

SHOW PROCESSLIST;
这将向您显示当前正在运行或要运行的队列中的任何查询、查询内容及其执行的操作(如果查询太长,此命令将截断查询,您可以使用show FULL PROCESSLIST查看完整的查询文本)

您还需要关注诸如缓冲区大小之类的问题,以及(如果您使用的是innodb表),因为所有这些内存分配都会影响查询性能,从而导致MySQL耗尽CPU

您可能还需要仔细阅读以下内容,因为它们包含一些很好的信息


使用分析器也是一个非常好的主意。您可以在需要时打开它,它将显示您的应用程序正在运行的查询、是否存在重复查询、它们需要多长时间等等。我一直在研究的一个例子就是这样的,但还有很多。如果您使用的是Drupal、Joomla或Wordpress等软件,您需要在社区内四处询问,因为可能有一些模块可供他们使用,您无需手动集成任何内容即可获取这些信息。

因为这是谷歌搜索MySQL高CPU使用率或高负载的热门帖子,我将补充一个补充答案:

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


持久连接几乎总是不适合使用。我现在就把它们取下来,看看有什么不同,因为我不记得一个月前cpu超过2了!服务器往往有多个核心。CPU使用率百分比是相对于一个内核计算的,换句话说,完全使用两个内核的进程将有200%的CPU使用率。在这里,MySQL使用了一个核心的100%和另一个核心的60%。这并不意味着所有的CPU都用完了,很可能他至少还有两个空闲CPU。高CPU几乎总是意味着查询效率低下。这些问题通常通过更好的索引(特别是“复合”)和/或重新格式化查询来解决。非常感谢这一点,我删除了持久连接,然后设置了慢速查询日志。我阅读了日志,大多数查询来自两个表,并且这些表没有被正确地索引!虽然只花了大约10分钟,但结果是:CPU负载平均为0.48(1分钟)0.95(5分钟)2.42(15分钟),这非常感谢相同的问题,通过索引减慢进程的表来解决,谢谢Steven和Juddling@Juddling你能详细说明一下如何给表格编制索引吗?也许有什么联系?我知道已经有一段时间了,但我对这件事真的很陌生。很抱歉,noobish问题日志记录的慢查询帮助我找到了CPU利用率高的特殊问题。在我的例子中,它是一个Wordpress插件(ultimate tag cloud widget),每点击一次,它都会执行一个可怕的查询,只是为了显示流行的标签。这是一个很棒的插件,但需要通过某种缓存来增强(我最终定制了它以解决问题)。另一个帮助解决不同问题的方法是修改上面提到的参数innodb_buffer_pool_size。在试图找到CPU利用率高的原因时,我在某处读到innodb_buffer_pool_size应该至少是文件ibdata1的大小,该文件位于/var/lib/mysql中。当InnoDB能够驻留在内存中时,它的工作效率似乎要高得多。这在某些情况下可能很难做到,因为ibdata1可能非常庞大!还有人建议在某个地方确保innodb_log_buffer_大小是innodb_buffer_pool_大小的25%。由于最初的帖子大约是3年前发布的,我怀疑这是原始海报出现问题的原因。但这是我的问题的原因,刚才救了我-所以谢谢!更多信息:我在Ubuntu 12.04上遇到了同样的问题和解决方案。解决稍有不同的步骤:服务ntp停止和日期-s“
date
”&&service ntp启动MySQL CPU使用率从50-100%立即下降到0-1%这只能确保执行吗?我的意思是,即使不是原因,运行它是否安全?2015年7月1日-我刚刚在当前运行Amazon Linux的AWS EC2服务器上遇到了这个闰秒错误。在此配置上使用
sudo service ntpd stop
。此解决方案使用+1。我的MySQL在几个月内一直以50-60%的速度运行,这是毫无原因的,在应用了这个解决方案之后,它一直下降到现在的0.0-0.3%,这就是它应该的状态。非常感谢。不知道为什么这会吸引匿名的反对票,因为这是一个ca
$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start