Amazon EFS 上带有 Web Root 的 PHP 应用程序占用了过多的 EFS 带宽

Amazon EFS 上带有 Web Root 的 PHP 应用程序占用了过多的 EFS 带宽

Web 根目录 /var/www/html 已安装在 EFS 上

使用通常的 AWS 建议命令和通用 EFS 进行安装 sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-name.efs.eu-west-1.amazonaws.com:/ html

系统按预期运行。

我们的 EFS 信用似乎很快就用完了,我不知道是什么消耗了所有的带宽和通话信用。- PHP Opcache 已打开 - PHP Opcache 也不验证时间戳,因此不需要统计来检查文件是否已被修改。- Apache 上的 AllowOverride 设置为 None(无 .htaccess 扫描等)

如果我对单个 .php 文件进行 curl 操作,我可以通过 tcpdump 看到在初始调用之后没有 nfs 调用,这很好。tcpdump -vvv -s 200 port nfs

即使我的 test.php 包含其他要测试的 .php 文件,也不会调用服务器。

但是,如果我对 Zend Framework 应用程序执行 tcpdump 和 curl,则会有几个调用。这只是针对 ZF 应用程序(没有图像,正在下载)。所有 PHP 文件都将放在 opcache 上,所以我不确定所有这些调用的用途。

知道是什么原因导致 EFS 占用如此大的带宽吗?我们似乎每 5 分钟就会为一个简单的应用程序使用 300MB。

答案1

有多种方法可以收集有关此问题的信息。

对于所有这些方法,我建议使用可以处理和可视化日志文件的工具。我为此使用 Amazon Athena,这使得从 S3 加载 Amazon 日志文件变得非常容易。另一个可视化工具是 Amazon QuickSight。

  1. 检查应用程序的日志文件。尝试确定正常的流量,以查明是否存在意外流量。您的网站上可能有好机器人或坏机器人在骚扰。Amazon WAF 可以帮助阻止不良流量。
  2. 启用 VPC Flowlogs。Flowlogs 将向您显示所有网络流量。您可以深入了解您的实例和 EFS。然后,Athena 可以向您显示谁在与谁对话以及带宽被消耗在哪里。
  3. 启用 CloudTrail。CloudTrail 将向您显示发布到 EFS 的所有 API(以及更多)。这可能会识别出一些意料之外的东西。
  4. CloudWatch。CloudWatch 可以为您显示指标,以便您确定一天中 EFS 带宽被消耗的时间。您还可以设置警报以通过电子邮件、短信等方式通知您。还有更多功能可帮助您监控基础设施。

一旦你弄清楚了,请更新此帖子。你的经验和信息将帮助其他人。

相关内容