在安装了 Drupal 站点的机器上,EC2 CPU 利用率每次都达到 100%

在安装了 Drupal 站点的机器上,EC2 CPU 利用率每次都达到 100%

我的生产 drupal 网站在 EC2 上运行。最近我们注意到我们的 EC2 CPU 利用率达到了 100%。我检查了我的网站流量,没有多少用户。我使用命令检查了在 EC2 中运行的进程top。我看到一个命令jbd2_sda1-8。我不明白这个命令是用来做什么的。我看到该命令由用户调用www-data,并且显示该命令的 CPU 使用率为 200%。据我所知,这www-data意味着该命令是由我的机器中运行的某个应用程序调用的。我的 drupal 网站使用 PHP-7.1 和 Nginx。我运行了该命令sudo service php7.1-fpm restart。然后我检查了进程。该进程被终止了。所以我假设,该命令是由某个 php 进程调用的。我检查了 EC2 监控,我的 CPU 使用率下降到了 3%。

大约一个小时后一切似乎都正常,突然我再次收到来自 AWS 的警报,说 CPU 使用率过高。我执行了相同的过程进行调试。这次我看到了一些不同的命令kjournald。此进程占用了高 CPU,这也是来自用户的www-data

我很困惑,我试图找出这个命令的含义,但我什么都没明白,也没有发现旧流程和新流程之间的任何关系。

这个问题一直存在。如果我重新启动 php,该进程将被终止,一段时间后它会再次出现。我不知道问题是什么。

我的故障排除实验:

  • 我复制了代码并将其放在我的暂存环境中,在那台机器上,我没有遇到问题(因为它是暂存环境,根本没有流量)。我尝试将生产 DNS 映射到暂存环境,因为它没有显示任何问题,但在 DNS 映射之后,第二个环境中也出现了同样的问题。第一个实例恢复正常。
  • 我在 nginx 中启用了访问监控,并检查了在 CPU 达到 100% 时是否有任何异常请求(以检查我的网站是否受到了某种攻击)。在 CPU 峰值时,我找不到任何可疑请求。
  • 我在 ELB 中启用了访问监控,并使用 AWS athena 检查了请求。在那里也找不到任何东西。

我被困在这里。不知道发生了什么。有人能帮忙吗?

答案1

如果kjournald消耗了大量的资源,就意味着您的操作系统正在执行大量的日志操作,这些操作是由于文件系统的改变(磁盘操作)而引起的。

这意味着某些东西对文件系统的写入比应有的要多得多,或者你的块存储存在一些问题。

用于lsof查看您的操作系统在任何给定时间正在使用哪些文件。

除此之外,如果您的生产环境和暂存环境是同时创建的,具有相同的实例类,位于相同的可用区,并且您确信您的 PHP 应用程序设计良好(如果是 Drupal 的话应该没问题)并且您最近没有更改任何内容,我会考虑重新配置 EC2 实例。

制作快照并重新部署,最好在不同的实例类上,以确保您移动到不同的基础设施堆栈。

我推测这些实例是由 EBS 支持的,在这种情况下,它们可能正在使用 AWS 中一些已损坏的块存储。

相关内容