AWS Codedeploy-agent部署正在使用我的所有inode

时间:2016-02-16 15:17:15

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

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

即使df显示我的磁盘使用率已接近满,我的构建也开始失败并显示“设备上没有剩余空间”错误。

我通过运行df -ih并发现我的inode使用率在/dev/xvda1接近100%时发现我的inode存在问题。

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

现在我到了/opt/codedeploy-agent/deployment-root/aafbfc42-d92d-4260-be40-6c331a3c3a13的位置,并且代码保存的最后5个部署中的每个部署都使用~70k inode,其中大多数是由node_modules目录引起的在我的应用中,babel-preset-es2015使用了约40k。

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

由于

编辑:了解更多信息。我的一个生产服务器(与另一个相同的设置)具有6.3M inode,而问题服务器只有512K inode ......

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

2 个答案:

答案 0 :(得分:0)

在AppSpec文件中添加“AfterInstall”挂钩。

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

答案 1 :(得分: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 阶段之前删除您的 DownloadBundle(或 npm prune),以便释放一些空间。但请注意,这种方式在一定程度上限制了运行和调试旧部署的能力。