【问题标题】:AWS Codedeploy-agent deploys are using all of my inodesAWS Codedeploy-agent 部署正在使用我所有的 inode
【发布时间】:2016-05-27 22:44:34
【问题描述】:

我在 AWS EC2 c3.large 实例上运行 Ubuntu 14.04 值得信赖。

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

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

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

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

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

谢谢

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

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

【问题讨论】:

    标签: amazon-web-services ubuntu-14.04 inode aws-code-deploy


    【解决方案1】:

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

    这可能是 /opt/codedeploy-agent 树(如 node_modules 目录)的一部分上的 rm -rfnpm 命令,如 npm prune

    【讨论】:

      【解决方案2】:

      我也遇到了这个问题,因为 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
      

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

      【讨论】:

        【解决方案3】:

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

        ]$ 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 个调试副本。)

        【讨论】:

          猜你喜欢
          • 2018-04-27
          • 1970-01-01
          • 1970-01-01
          • 2020-01-18
          • 1970-01-01
          • 2018-09-16
          • 1970-01-01
          • 1970-01-01
          • 2018-12-13
          相关资源
          最近更新 更多