我在 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
,大小是219M
和248MB
.
/var/log/btmp.1
文件具有330MB
。我可以删除这个吗?
如果我显示/var/log/nginx
目录的大小 -du -hs .
- 大小是846MB
.是否可以在不影响应用程序功能的情况下清空此目录中的日志文件?
另外,知道为什么我突然开始耗尽服务器上的可用磁盘空间吗?我应该如何"调试"这种情况?
提前谢谢你。
我个人喜欢使用ncdu
工具来查找系统中占用最多空间的文件。
安装完成后,您只需在命令行中键入ncdu <directory>
即可获得一个漂亮的界面,其中包含要调查的目录的最大到最小排序的目录。 您可以向下导航到每个目录并找到占用最多空间的文件。
如果您的服务器已经运行了四年,那么17G硬盘驱动器最终将不可避免地被服务器日志耗尽。 您可能有一堆可以删除的nginx日志和应用程序服务器日志。
正如 Jon 建议的那样,您可以根据需要设置轮换日志以防止服务器填满。 如果您想存储所有历史记录,您还可以将存储空间的大小加倍。