Rails 服务器磁盘 space 一直显示 space

Rails server disk space keeps showing out of space

我是 运行 一个 rails 服务器,在 EC2 上有 docker,它有 64G 容量。昨天网络服务崩溃了,我登录服务器并不断从磁盘 space 中获取关于 运行 的消息。我使用了 df -hdu -sh /*/,结果是这样的:

我删除了一些日志以释放大约 3G space,但大约 30 分钟后又满了。我再次执行命令du -sh /*/,得到如下结果。

我看不到 space 在哪里增加,/var 文件夹减少 3G 是唯一改变的东西。

如有任何提示,我们将不胜感激。

其中一个问题可能是进程可能正在删除一些大文件,但这些文件可能仍在磁盘上,并且会在进程获得 SIGHUP 或进程重新启动时被删除。

您可以通过以下方式找到此类文件:

lsof -n | grep -i deleted

这将显示已删除文件的列表和进程。您可以重新启动该进程以释放磁盘,或者您可以向该进程发送 SIGHUP 信号。

要查看占用磁盘的内容 space,您必须注意一些事项。您可以创建一个 cron 作业,每 5 分钟(或每 10 分钟或 30 分钟,您可以选择)运行 执行以下操作:

date >> /tmp/deleted-files.txt && lsof -n | grep -i deleted >> /tmp/deleted-files.txt

分析文件,看看文件是否被长期创建和删除。

如果您确定了不断增长的目录,您还可以创建一个 cron 作业,每隔几分钟 运行 将文件列表保存在一个临时文件中,就像这样

date >> /tmp/file-list.txt && ls -ltrh >> /tmp/file-list.txt

这样您就可以查看正在生成的文件并查看其内容。可能有人在调试模式下登录。

如果您在 Rails (RoR) 上使用 Ruby,Ruby on Rails production log rotation 线程可以帮助您设置日志轮换。您可以积极地进行日志轮换以控制磁盘大小。

我可以告诉您的一件事是,如果您附加一个价值 200 GB 的 EBS 卷,那么一年的费用约为 200 美元,您将不得不花更少的时间在紧急问题上。如果您节省的时间在一年中产生的收入超过 200 美元,那么从长远来看,获得一个 EBS 卷并在上面存储日志将是一个更便宜的提议 运行。