Приложение Rails 5 на сервере AWS EC2 Ubuntu: Errno :: ENOSPC: на устройстве не осталось места - PullRequest
0 голосов
/ 04 октября 2019

У меня есть Ruby On Rails на сервере Ubuntu - сервер находится в инфраструктуре 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. Могу ли я очистить файлы журнала в этом каталоге, не затрагивая при этом функциональность приложения?

Кроме того, есть идеи, почему у меня внезапно начинает заканчиваться свободное место на сервере? Как мне «отладить» эту ситуацию?

Заранее спасибо.

1 Ответ

1 голос
/ 04 октября 2019

Мне лично нравится использовать инструмент ncdu, чтобы найти файлы в системе, которые занимают больше всего места.

После того, как вы установили его, просто наберите ncdu <directory> в командной строке иполучить красивый интерфейс с каталогами, отсортированными по величине к наименьшему из каталога, который вы хотите исследовать. Вы можете перейти вниз по каждому каталогу и найти файлы, занимающие больше места.

Если ваш сервер работал четыре года, неизбежно, что жесткий диск 17G в конечном итоге будет использован журналами сервера. ,Вероятно, у вас есть куча журналов nginx и журналов сервера приложений, которые вы можете удалить.

Как предложил Джон, в зависимости от ваших потребностей, вы можете настроить ротационные журналы, чтобы предотвратить заполнение сервера. Вы также можете удвоить размер своего хранилища, если хотите хранить всю эту историю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...