如何解决服务器 CPU 使用率过高的问题?

如何解决服务器 CPU 使用率过高的问题?

在我的云服务器上,MySQL CPU 使用率在格林威治标准时间周日下午 1 点跃升至 100% 以上。

我该如何排除此问题的原因?

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

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 点开始,这是有道理的。

答案1

正如它所述手册

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

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

其次,这听起来像是一项计划任务,第一级方法是检查调度程序 (cron)。在 Linux 系统上,通常 /var/log/cron 应该记录 cron 在星期日下午 1 点左右启动的任务。

答案2

如果您的查询已经运行了一天以上,那么您就遇到了一个需要解决的大问题(不要介意您的服务器上还发生了什么其他事情)。

首先要做的是终止该查询(使用 mysqladmin),然后您需要花一些时间查看数据库以及其中发生的事情。根据 MySQL 的配置方式,您应该有一个慢查询日志。理想情况下,应将其配置为记录全部查询,而不仅仅是慢查询。有可用的工具可以读取这些信息并确定导致最大负载的原因 - 但如果您使用的是 MyISAM 引擎,您还需要检查并发问题。这只是开始发现问题——你仍然需要解决它。

你确实需要大量学习,或者寻求一些专业的帮助。

相关内容