Apache 和 MySQL 进程以 100% CPU 运行

Apache 和 MySQL 进程以 100% CPU 运行

我有一个生产服务器,它通常非常稳定,并且已经稳定了很长时间。

昨晚,它突然开始显示非常高的负载(150+)。停用 Apache 将立即降低负载。

在此处输入图片描述

这是 top 的输出,重新启动 Apache 后不久,负载已经回升至 22.68。

服务器日志和 mod_status 的输出没有显示任何特别有趣的内容,除了由于高负载导致请求开始备份。

从请求方面来看,似乎并没有任何异常的服务器负载可以解释突然出现的问题。

有任何想法吗?

更新

以下是来自的 mysql 连接的屏幕截图show processlist; 在此处输入图片描述

答案1

  1. 减少 Apache 创建的子页面数量。数十个网页相互干扰没有任何好处。Apache 很乐意延迟启动新页面。
  2. 如果“高平均负载”是由 MySQL 引起的,那么很可能是缺少索引或公式化不当SELECT。找到那个不合理的查询,然后在 stackoverflow.com 上提出问题,讨论如何改进它。

至于SHOW PROCESSLIST您添加的内容,我的评论是 Zzzzzzzzzzz。MySQL 没有做“任何事情”——请注意,基本上所有连接都处于“睡眠”模式。“睡眠”是连接(可能来自连接池)的状态,除了等待下一个 SQL 语句发送给它之外,它什么也不做。

看看top... 看起来 mysqld 使用了 2 个核心的 CPU 能力,而 Apache 使用了 6 个核心的 CPU 能力。您使用的是哪个客户端?对于 PHP,您有一些需要优化的繁忙 PHP 代码。首先查看每个循环,尤其是嵌套循环。

至于“突发问题”,... 这种情况(以我的经验来看)会持续一段时间,然后“突然”‘爆发’。它们通常最终会平息。当然,您可以关闭 Apache 或 mysqld,或者重新启动或阻止客户端进入。与此同时,您的‘用户’会获得糟糕的‘用户体验’。

答案2

供以后参考,问题出在 RAID 控制器故障。两台相同年龄的相同服务器的 RAID 控制器在一周内相继出现故障。

不仅 RAID 控制器出现故障,而且用于告知我 RAID 控制器出现故障的系统通知也失败了。

相关内容