最近我的服务器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这样的软件,那么您需要在社区内询问,因为可能存在可用的模块,这些模块允许您获取此信息,而无需手动集成任何内容.
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)
Row*_*haw 30
如果外部世界可以看到这个服务器,那么它是否有很多请求从外部世界连接(即试图闯入它的人)是值得的.
| 归档时间: |
|
| 查看次数: |
327331 次 |
| 最近记录: |