![nginx 网络服务器向 NFS 发送大量元数据请求](https://linux22.com/image/709613/nginx%20%E7%BD%91%E7%BB%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%91%20NFS%20%E5%8F%91%E9%80%81%E5%A4%A7%E9%87%8F%E5%85%83%E6%95%B0%E6%8D%AE%E8%AF%B7%E6%B1%82.png)
我得到了一个简单的 AWS 云,使用 nginx 服务器 (EC2) 和 NFS 驱动器来存储 CMS 文件 (EFS)。亚马逊的信用额度很高,而我在流量非常低的云上用完了信用额度。经过调查,结果发现 EC2 正在用元数据请求淹没 EFS。我只是不知道是怎么回事,为什么?
NFS 上的所有文件总共 8GB,它们都是 PHP 文件。静态文件被卸载到 S3。EC2 和 EFS 之间的流量约为每秒 1MB,但是元数据流量为每秒 5MB!也就是说,仅元数据流量每分钟就有 100-300MB !
检查 nfsstat 并转储流量后发现,90% 的流量是 GETATTR 请求和响应。
但观察 EC2,处理器几乎处于休眠状态,因此每秒处理 5MB 数据听起来不现实。更不用说 1MB 传输需要 5MB 元数据。
我想进行更多搜索,但我的知识和 Google 已经结束,所以不知道从哪里开始。尝试使用 lsof 和 nsfstats,但找不到世界上到底有什么需要这么多元数据。任何帮助都将不胜感激。
编辑:如果您正在寻找一种解决方案来解决由于这个或类似原因而导致 AWS EFS 信用耗尽的问题 - EFS 信用基于您占用的空间。解决方案(来自 AWS 支持团队)是创建虚拟文件来增加您的信用余额。在我的情况下,通过命令添加 50GB 的“空”占用空间就可以解决问题:
dd if=/dev/zero of=/path/to/efs/dummyfile bs=1G count=10
以上将在 EFS 上创建 10GB 的“空”文件,这将增加您的信用