如何解决在服务器上的高CPU使用率?

在我的云服务器上,星期天格林威治标准时间下午1点,MySQL CPU使用率跳跃超过100%。

我怎样才能解决这个问题的原因?

我被告知在服务器上运行cmd'top ' ,但是这只能告诉我以下内容:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2326 mysql 20 0 2182m 128m 5264 S 99.8 1.3 1610:50 msqld 

我知道MySQL是使用CPU。 运行后:

 SHOW FULL PROCESS LIST; 

我发现这个(***是私人信息):

 | Id | User | Host | db | Command | Time | State | Info | | 288484 | *** | localhost | *** | Query | 93110 | Copying to tmp table | SELECT SQL_CALC_FOUND_ROWS wp_***_posts.* FROM wp_***_posts INNER JOIN wp_***_postmeta ON (wp_h | 

随着时间在几秒钟内,这个过程从我执行命令的周日下午1点开始是有意义的。

正如在手册中所述 :

如果你有PROCESS权限,你可以看到所有的线程。 否则,您只能看到自己的线程(即与您使用的MySQL帐户关联的线程)。 如果您不使用FULL关键字,则每个语句的前100个字符将显示在“信息”字段中。

如果您使用“其中一个数据库”,您可能没有足够的权限,您应该使用“root”帐户或授予您自己的权限。 这样你就可以在单个窗口中看到所有数据库中发生了什么。

其次,这听起来像一个计划的工作,第一级的方法是检查调度(cron)。 在Linux系统上,通常/ var / log / cron应该logging周日下午1点左右由cron启动的内容。

如果你有一个查询已经运行了一天以上,那么你有一个很大的问题,你需要修复(不要在意你的服务器上发生了什么)。

首先要做的是杀死那个查询(使用mysqladmin),那么你需要花一些时间来查看你的数据库和那里正在发生的事情。 根据MySQL的configuration,你应该有一个慢速的查询日志。 理想情况下,这应该被configuration为logging所有查询,而不仅仅是慢的。 有些工具可以读取这些信息,并确定是什么导致了最多的负载 – 但是如果您正在使用MyISAM工具,则还需要检查并发问题。 这只是find问题的开始 – 你仍然需要修复它。

真的,你需要做很多的学习,或者得到一些专业的帮助。