1

我在 AWS EC2 c3.large 实例上运行 Ubuntu 14.04 trusty。

我的构建开始失败,出现“设备上没有剩余空间”错误,尽管df显示我的磁盘使用量远未满。

然后,我通过运行df -ih并看到我的 inode 使用率接近 100%,发现这是我的 inode的问题/dev/xvda1

我使用以下脚本将 inode 使用情况跟踪到 codedeploy 代理,通过将目录for i in /*; do echo $i; find $i |wc -l; done更改/*为更具体的目录来查找特定问题,从而找到具有高 inode 使用率的目录。

现在我已经到了我所处的位置/opt/codedeploy-agent/deployment-root/aafbfc42-d92d-4260-be40-6c331a3c3a13,codeeploy 保留的最后 5 个部署中的每一个都使用 ~70k inode,其中大部分是由于node_modules我的应用程序中的目录,其中 ~40k 由babel-preset-es2015.

我不确定从这里开始的最佳方式是什么。这是正常数量的 inodebabel-preset-es2015吗?有没有一种方法可以安全地删除整个部署或以某种方式不包含node_modules在这些部署中?我还缺少其他解决方案吗?

谢谢

编辑:对此进行更多研究。我的一台生产服务器(与另一台相同)有 630 万个 inode,而问题服务器只有 512K 个 inode...

EDIT2:看起来一个实例只附加了一个 8GB 卷,而另一个实例有一个 100GB 卷。仍然不确定为什么 es2015 预设会占用这么多空间,但至少我现在知道从哪里开始修复这个问题。

4

3 回答 3

2

将“AfterInstall”挂钩添加到您的 AppSpec 文件。

这可能是rm -rf/opt/codedeploy-agent 树的一部分(如 node_modules 目录)或类似的npm命令npm prune

于 2016-02-16T15:45:20.587 回答
0

更改文件:max_revisions:中的值/etc/codedeploy-agent/conf/codedeployagent.yml

]$ cat /etc/codedeploy-agent/conf/codedeployagent.yml
---
:log_aws_wire: false
:log_dir: '/var/log/aws/codedeploy-agent/'
:pid_dir: '/opt/codedeploy-agent/state/.pid/'
:program_name: codedeploy-agent
:root_dir: '/home/ec2-user/'
:verbose: false
:wait_between_runs: 1
:proxy_uri:
:max_revisions: 2

(如果您不关心免费套餐并且您的实例附加了 EBS 支持的卷,则您始终可以分离它,增加其大小,然后重新附加并重新安装卷。这样您可以保留默认值5 个调试副本。)

于 2021-09-12T20:59:45.893 回答
0

我也遇到了这个问题,因为 CodeDeploy 代理的默认配置是保存您的应用程序的 5 个修订版。基本上,如果您存储node_modules在您的应用程序修订版中,例如,如果您需要在服务器端运行 Node 应用程序,那么 INode 很容易耗尽磁盘。

我决定将我的最大修订配置更新为 2,因为我不关心比上一次迭代更旧的任何东西。一种方法是在您的实例上使用 sed + 用户数据脚本来覆盖它。

# Example of user data script I added to find and replace config
sed -i 's/max_revisions: 5/max_revisions: 2/g' /etc/codedeploy-agent/conf/codedeployagent.yml

另一种解决方案是node_modules在舞台之前删除您的(或 npm prune),DownloadBundle以便腾出一些空间。尽管请注意,这种方式在一定程度上限制了运行和调试旧部署的能力。

于 2021-08-12T01:09:16.917 回答