我在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预设占用了这么多空间,但至少我知道现在从哪里开始修复它。
答案 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),以便释放一些空间。但请注意,这种方式在一定程度上限制了运行和调试旧部署的能力。