AWS EC2 Ubuntu 服务器上的 Rails 5 应用程序:Errno::ENOSPC:设备上没有剩余空间



我在 Ubuntu 服务器上有一个 Ruby On Rails - 服务器位于 AWS 基础设施中。

该应用程序在那里运行了 4 年,一切都很好,直到上周,当我开始收到这些(和类似(错误消息时:

Errno::ENOSPC: No space left on device @ io_write - /home/deployer/apps/myapp-production/shared/log/unicorn.stderr.log

我必须登录服务器并清空日志文件 ->unicorn.stderr.log.现在,此错误每隔一天(或每隔一天(发生一次。

这是我的 Rails 应用程序中的日志文件的样子:

drwxrwxr-x  2 deployer deployer     4096 Sep 28 06:28 .
drwxrwxr-x 11 deployer deployer     4096 Jun 11  2016 ..
-rw-rw-r--  1 deployer deployer        0 Sep  9  2017 newrelic_agent.log
-rw-rw-r--  1 deployer deployer        0 Sep 19 16:22 newrelic_agent.log.1
-rw-rw-r--  1 deployer deployer        0 Sep 19 16:23 newrelic_agent.log.2.gz
-rw-rw-r--  1 deployer deployer        0 Sep 19 16:23 newrelic_agent.log.3.gz
-rw-rw-r--  1 deployer deployer        0 Sep 19 16:23 newrelic_agent.log.4.gz
-rw-rw-r--  1 deployer deployer        0 Sep 19 16:23 newrelic_agent.log.5.gz
-rw-rw-r--  1 deployer deployer        0 Sep 19 16:23 newrelic_agent.log.6.gz
-rw-rw-r--  1 deployer deployer        0 Sep 19 16:23 newrelic_agent.log.7.gz
-rw-rw-r--  1 deployer deployer        0 Feb 20  2018 procat
-rw-rw-r--  1 deployer deployer 12480512 Sep 28 21:12 production.log
-rw-rw-r--  1 deployer deployer 71216391 Sep 28 06:28 production.log.1
-rw-rw-r--  1 deployer deployer       20 Sep 27 12:22 production.log.2.gz
-rw-rw-r--  1 deployer deployer       20 Sep 26 15:27 production.log.3.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:28 production.log.4.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:28 production.log.5.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:28 production.log.6.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:28 production.log.7.gz
-rw-rw-r--  1 deployer deployer  1391716 Sep 28 21:11 skylight.log
-rw-rw-r--  1 deployer deployer   734536 Sep 28 06:28 skylight.log.1
-rw-rw-r--  1 deployer deployer       20 Sep 27 12:23 skylight.log.2.gz
-rw-rw-r--  1 deployer deployer       20 Sep 26 15:28 skylight.log.3.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:29 skylight.log.4.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:29 skylight.log.5.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:29 skylight.log.6.gz
-rw-rw-r--  1 deployer deployer        0 Sep 26 15:29 skylight.log.7.gz
-rw-rw-r--  1 deployer deployer        0 May 20  2018 staging.log
-rw-rw-r--  1 deployer deployer        0 Oct  4  2016 unicorn.log
-rw-rw-r--  1 deployer deployer        1 Oct  4  2016 unicorn.log.1
-rw-rw-r--  1 deployer deployer    20480 Sep 28 21:13 unicorn.stderr.log

这是df -H清空日志文件之前所说的:

Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G   13k  2.0G   1% /dev
tmpfs           395M  373k  395M   1% /run
/dev/xvda1       17G   16G     0 100% /
none            4.1k     0  4.1k   0% /sys/fs/cgroup
none            5.3M     0  5.3M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            105M     0  105M   0% /run/user

这是在清空它们之后:

Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G   12K  1.9G   1% /dev
tmpfs           377M  364K  377M   1% /run
/dev/xvda1       16G   15G  437M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
none            100M     0  100M   0% /run/user

该应用程序非常一致,并不是说最近流量增加了 10 倍。

我还尝试查看服务器上最大的文件 -find / -size +100M- 这是输出:

/var/log/nginx/myapp_production.access.log.1
/var/log/nginx/myapp_production.access.log
/var/log/btmp.1
find: `/var/spool/rsyslog': Permission denied
find: `/var/spool/cron/atjobs': Permission denied
find: `/var/spool/cron/crontabs': Permission denied
find: `/var/spool/cron/atspool': Permission denied
find: `/var/cache/ldconfig': Permission denied
find: `/var/lib/polkit-1': Permission denied
find: `/var/lib/monit/events': Permission denied
find: `/var/lib/nginx/scgi': Permission denied
find: `/var/lib/nginx/body': Permission denied
find: `/var/lib/nginx/uwsgi': Permission denied
find: `/var/lib/nginx/fastcgi': Permission denied
find: `/var/lib/nginx/proxy': Permission denied
find: `/var/lib/sudo': Permission denied
find: `/etc/ssl/private': Permission denied
find: `/etc/chatscripts': Permission denied
find: `/etc/polkit-1/localauthority': Permission denied
find: `/etc/ppp/peers': Permission denied
find: `/etc/sudoers.d': Permission denied
find: `/root': Permission denied
find: `/run/user/1003': Permission denied
...

我查看了这两个文件 -/var/log/nginx/myapp_production.access.log.1/var/log/nginx/myapp_production.access.log,大小是219M248MB.

/var/log/btmp.1文件具有330MB。我可以删除这个吗?

如果我显示/var/log/nginx目录的大小 -du -hs .- 大小是846MB.是否可以在不影响应用程序功能的情况下清空此目录中的日志文件?

另外,知道为什么我突然开始耗尽服务器上的可用磁盘空间吗?我应该如何"调试"这种情况?

提前谢谢你。

我个人喜欢使用ncdu工具来查找系统中占用最多空间的文件。

安装完成后,您只需在命令行中键入ncdu <directory>即可获得一个漂亮的界面,其中包含要调查的目录的最大到最小排序的目录。 您可以向下导航到每个目录并找到占用最多空间的文件。

如果您的服务器已经运行了四年,那么17G硬盘驱动器最终将不可避免地被服务器日志耗尽。 您可能有一堆可以删除的nginx日志和应用程序服务器日志。

正如 Jon 建议的那样,您可以根据需要设置轮换日志以防止服务器填满。 如果您想存储所有历史记录,您还可以将存储空间的大小加倍。

最新更新