【Rails】Capistranoでvirtual memory exhaustedと言われて、デプロイ出来なくなった

# 症状
このコマンドでデプロイしました。今まで特に問題は起きておらず、変化点も特にないはずなのに、急にデプロイできなくなりました。

```
$ bundle exec cap production deploy
```

このようなメッセージがでてしまいます。（詳しいエラー文は残っていません、すみません）

```
virtual memory exhausted
```
調べてみると、どうもEC2のメモリ不足らしい。

# 調査
まずは、SSHログインします。

```terminal
$ ssh アプリ名               
Last login: Mon Mar  1 10:59:29 2021 from 122-222-130-5.east.ap.gmo-isp.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
/home/****/.rbenv/libexec/rbenv-init: 行 131: ヒアドキュメント用一時ファイルを作成できません: No space left on device
```
SSHログイン時にも今までにないメッセージ「ヒアドキュメント用一時ファイルを作成できません: No space left on device」が出ています。


このコマンドで使用状況をみることが出来ます。

```
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         482M     0  482M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M   19M  473M    4% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  8.0G   20K  100% /
tmpfs             99M     0   99M    0% /run/user/1001
```
/dev/xvda1が容量食ってそうです。

# 無駄なファイル削除
ログを削除していきます。

```
$ sudo find /var/log/ -type f -name \* -exec cp -f /dev/null {} \;
[sudo] **** のパスワード:
```

しかし、あまり変化ないようで、いまだ99％使用しています。

```
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         482M     0  482M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M   19M  473M    4% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  7.9G  155M   99% /
tmpfs             99M     0   99M    0% /run/user/1001
```

以下、調査過程を残しておりますが、読み飛ばして頂いて構いません。
次の章の[解決できた方法](#解決できた方法)をご覧ください。

```
$ cd /var
[**** var]$ ls -la
合計 12
drwxr-xr-x 20 root root  280  2月 20 12:23 .
dr-xr-xr-x 18 root root  269  2月 28 11:18 ..
-rw-r--r--  1 root root  163  1月 26 04:14 .updated
drwxr-xr-x  2 root root   19  1月 26 04:15 account
drwxr-xr-x  2 root root    6  4月  9  2019 adm
drwxr-xr-x  6 root root   63  1月 26 04:15 cache
drwxr-xr-x  3 root root   18  1月 26 04:15 db
drwxr-xr-x  3 root root   18  1月 26 04:15 empty
drwxr-xr-x  2 root root    6  4月  9  2019 games
drwxr-xr-x  2 root root    6  4月  9  2019 gopher
drwxr-xr-x  3 root root   18  1月 26 04:14 kerberos
drwxr-xr-x 34 root root 4096  2月 11 12:01 lib
drwxr-xr-x  2 root root    6  4月  9  2019 local
lrwxrwxrwx  1 root root   11  1月 26 04:14 lock -> ../run/lock
drwxr-xr-x  8 root root 4096  3月  1 07:12 log
lrwxrwxrwx  1 root root   10  1月 26 04:14 mail -> spool/mail
drwxr-xr-x  2 root root    6  4月  9  2019 nis
drwxr-xr-x  2 root root    6  4月  9  2019 opt
drwxr-xr-x  2 root root    6  4月  9  2019 preserve
lrwxrwxrwx  1 root root    6  1月 26 04:14 run -> ../run
drwxr-xr-x  9 root root   97  1月 26 04:15 spool
drwxrwxrwt  5 root root  321  3月  1 07:12 tmp
drwxr-xr-x  3 1000 1000   24  2月 21 13:02 www
drwxr-xr-x  2 root root    6  4月  9  2019 yp
```


```
[**** var]$ cd log
[**** log]$ ls -al
合計 76
drwxr-xr-x   8 root   root             4096  3月  1 07:12 .
drwxr-xr-x  20 root   root              280  2月 20 12:23 ..
drwxr-xr-x   3 root   root               17  2月 11 08:19 amazon
drwx------   2 root   root               99  2月 27 13:14 audit
-rw-------   1 root   root                0  3月  1 11:41 boot.log
-rw-------   1 root   root                0  3月  1 11:41 boot.log-20210222
-rw-------   1 root   root                0  3月  1 11:41 boot.log-20210223
-rw-------   1 root   root                0  3月  1 11:41 boot.log-20210224
-rw-------   1 root   root                0  3月  1 11:41 boot.log-20210225
-rw-------   1 root   root                0  3月  1 11:41 boot.log-20210226
-rw-------   1 root   root                0  3月  1 11:41 boot.log-20210227
-rw-------   1 root   root                0  3月  1 11:41 boot.log-20210228
-rw-------   1 root   utmp             1152  3月  1 11:43 btmp
drwxr-xr-x   2 chrony chrony              6 12月 15 21:48 chrony
-rw-r--r--   1 root   root                0  3月  1 11:41 cloud-init-output.log
-rw-r--r--   1 root   root                0  3月  1 11:41 cloud-init.log
-rw-------   1 root   root              773  3月  1 11:41 cron
-rw-------   1 root   root                0  3月  1 11:41 cron-20210214
-rw-------   1 root   root                0  3月  1 11:41 cron-20210221
-rw-------   1 root   root                0  3月  1 11:41 cron-20210228
-rw-r--r--   1 root   root                0  3月  1 11:41 dmesg
-rw-r--r--   1 root   root                0  3月  1 11:41 dmesg.old
-rw-------   1 root   root                0  3月  1 11:41 grubby
-rw-r--r--   1 root   root                0  3月  1 11:41 grubby_prune_debug
drwxr-sr-x+  3 root   systemd-journal    46  2月 11 08:19 journal
-rw-r--r--   1 root   root                0  3月  1 11:41 lastlog
-rw-------   1 root   root                0  3月  1 11:41 maillog
-rw-------   1 root   root                0  3月  1 11:41 maillog-20210214
-rw-------   1 root   root                0  3月  1 11:41 maillog-20210221
-rw-------   1 root   root                0  3月  1 11:41 maillog-20210228
-rw-------   1 root   root            47389  3月  1 11:43 messages
-rw-------   1 root   root                0  3月  1 11:41 messages-20210214
-rw-------   1 root   root                0  3月  1 11:41 messages-20210221
-rw-------   1 root   root                0  3月  1 11:41 messages-20210228
-rw-r-----   1 mysql  mysql               0  3月  1 11:41 mysqld.log
drwxrwx---   2 nginx  root             4096  2月 28 03:41 nginx
drwxr-xr-x   2 root   root             4096  3月  1 00:00 sa
-rw-------   1 root   root             7707  3月  1 11:44 secure
-rw-------   1 root   root                0  3月  1 11:41 secure-20210214
-rw-------   1 root   root                0  3月  1 11:41 secure-20210221
-rw-------   1 root   root                0  3月  1 11:41 secure-20210228
-rw-------   1 root   root                0  3月  1 11:41 spooler
-rw-------   1 root   root                0  3月  1 11:41 spooler-20210214
-rw-------   1 root   root                0  3月  1 11:41 spooler-20210221
-rw-------   1 root   root                0  3月  1 11:41 spooler-20210228
-rw-------   1 root   root                0  3月  1 11:41 tallylog
-rw-rw-r--   1 root   utmp                0  3月  1 11:41 wtmp
-rw-------   1 root   root                0  3月  1 11:41 yum.log
```


```
[**** log]$ sudo cat messages
[sudo] **** のパスワード:
Mar  1 11:18:01 ip-10-0-0-73 systemd-logind: Removed session 39.
Mar  1 11:18:01 ip-10-0-0-73 systemd: Removed slice User Slice of tomo.
Mar  1 11:18:01 ip-10-0-0-73 systemd: Stopping User Slice of tomo.
Mar  1 11:18:01 ip-10-0-0-73 systemd: Removed slice User Slice of root.
Mar  1 11:18:01 ip-10-0-0-73 systemd: Stopping User Slice of root.
Mar  1 11:18:01 ip-10-0-0-73 rsyslogd: imjournal: fopen() failed for path: '/var/lib/rsyslog/imjournal.state.tmp': No space left on device [v8.24.0-52.amzn2 try http://www.rsyslog.com/e/2013 ]
省略
・
・
・

```

```
[**** log]$ sudo rm messages
[**** log]$ ls -la
合計 32
drwxr-xr-x   8 root   root            4096  3月  1 11:48 .
drwxr-xr-x  20 root   root             280  2月 20 12:23 ..
drwxr-xr-x   3 root   root              17  2月 11 08:19 amazon
drwx------   2 root   root              99  2月 27 13:14 audit
-rw-------   1 root   root               0  3月  1 11:41 boot.log
-rw-------   1 root   root               0  3月  1 11:41 boot.log-20210222
-rw-------   1 root   root               0  3月  1 11:41 boot.log-20210223
-rw-------   1 root   root               0  3月  1 11:41 boot.log-20210224
-rw-------   1 root   root               0  3月  1 11:41 boot.log-20210225
-rw-------   1 root   root               0  3月  1 11:41 boot.log-20210226
-rw-------   1 root   root               0  3月  1 11:41 boot.log-20210227
-rw-------   1 root   root               0  3月  1 11:41 boot.log-20210228
-rw-------   1 root   utmp            1152  3月  1 11:43 btmp
drwxr-xr-x   2 chrony chrony             6 12月 15 21:48 chrony
-rw-r--r--   1 root   root               0  3月  1 11:41 cloud-init-output.log
-rw-r--r--   1 root   root               0  3月  1 11:41 cloud-init.log
-rw-------   1 root   root             773  3月  1 11:41 cron
-rw-------   1 root   root               0  3月  1 11:41 cron-20210214
-rw-------   1 root   root               0  3月  1 11:41 cron-20210221
-rw-------   1 root   root               0  3月  1 11:41 cron-20210228
-rw-r--r--   1 root   root               0  3月  1 11:41 dmesg
-rw-r--r--   1 root   root               0  3月  1 11:41 dmesg.old
-rw-------   1 root   root               0  3月  1 11:41 grubby
-rw-r--r--   1 root   root               0  3月  1 11:41 grubby_prune_debug
drwxr-sr-x+  3 root   systemd-journal   46  2月 11 08:19 journal
-rw-r--r--   1 root   root               0  3月  1 11:41 lastlog
-rw-------   1 root   root               0  3月  1 11:41 maillog
-rw-------   1 root   root               0  3月  1 11:41 maillog-20210214
-rw-------   1 root   root               0  3月  1 11:41 maillog-20210221
-rw-------   1 root   root               0  3月  1 11:41 maillog-20210228
-rw-------   1 root   root               0  3月  1 11:41 messages-20210214
-rw-------   1 root   root               0  3月  1 11:41 messages-20210221
-rw-------   1 root   root               0  3月  1 11:41 messages-20210228
-rw-r-----   1 mysql  mysql              0  3月  1 11:41 mysqld.log
drwxrwx---   2 nginx  root            4096  2月 28 03:41 nginx
drwxr-xr-x   2 root   root            4096  3月  1 00:00 sa
-rw-------   1 root   root            8308  3月  1 11:48 secure
-rw-------   1 root   root               0  3月  1 11:41 secure-20210214
-rw-------   1 root   root               0  3月  1 11:41 secure-20210221
-rw-------   1 root   root               0  3月  1 11:41 secure-20210228
-rw-------   1 root   root               0  3月  1 11:41 spooler
-rw-------   1 root   root               0  3月  1 11:41 spooler-20210214
-rw-------   1 root   root               0  3月  1 11:41 spooler-20210221
-rw-------   1 root   root               0  3月  1 11:41 spooler-20210228
-rw-------   1 root   root               0  3月  1 11:41 tallylog
-rw-rw-r--   1 root   utmp               0  3月  1 11:41 wtmp
-rw-------   1 root   root               0  3月  1 11:41 yum.log
```

```
[**** log]$ cd
```

```
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         482M     0  482M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M   19M  473M    4% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  7.9G  155M   99% /
tmpfs             99M     0   99M    0% /run/user/1001
```

```
$ df -i
ファイルシス   Iノード  I使用  I残り I使用% マウント位置
devtmpfs        123170    284 122886     1% /dev
tmpfs           125862      2 125860     1% /dev/shm
tmpfs           125862    359 125503     1% /run
tmpfs           125862     16 125846     1% /sys/fs/cgroup
/dev/xvda1      728624 411840 316784    57% /
tmpfs           125862      1 125861     1% /run/user/1001
```

```
$ sudo du -sh
271M    .
```

```
$ sudo du -sh /*
0       /bin
59M     /boot
0       /dev
31M     /etc
271M    /home
0       /lib
0       /lib64
0       /local
0       /media
0       /mnt
116K    /opt
du: `/proc/27513/task/27513/fd/3' にアクセスできません: No such file or directory
du: `/proc/27513/task/27513/fdinfo/3' にアクセスできません: No such file or directory
du: `/proc/27513/fd/3' にアクセスできません: No such file or directory
du: `/proc/27513/fdinfo/3' にアクセスできません: No such file or directory
0       /proc
24K     /root
19M     /run
0       /sbin
0       /srv
272M    /swap
0       /sys
43M     /tmp
2.3G    /usr
4.7G    /var
```

```
$ sudo du -sh /var/*
0       /var/account
0       /var/adm
227M    /var/cache
0       /var/db
0       /var/empty
0       /var/games
0       /var/gopher
0       /var/kerberos
175M    /var/lib
0       /var/local
0       /var/lock
44K     /var/log
0       /var/mail
0       /var/nis
0       /var/opt
0       /var/preserve
0       /var/run
16K     /var/spool
28K     /var/tmp
4.3G    /var/www
0       /var/yp
```

```
$ sudo du -sh /*
0       /bin
59M     /boot
0       /dev
31M     /etc
271M    /home
0       /lib
0       /lib64
0       /local
0       /media
0       /mnt
116K    /opt
du: `/proc/27565/task/27565/fd/3' にアクセスできません: No such file or directory
du: `/proc/27565/task/27565/fdinfo/3' にアクセスできません: No such file or directory
du: `/proc/27565/fd/3' にアクセスできません: No such file or directory
du: `/proc/27565/fdinfo/3' にアクセスできません: No such file or directory
0       /proc
24K     /root
19M     /run
0       /sbin
0       /srv
272M    /swap
0       /sys
43M     /tmp
2.3G    /usr
^[[A4.7G        /var
```


# 解決できた方法
```
$ sudo du -sh /var/www/*
4.3G    /var/www/アプリ名
```


```terminal
$ sudo du -sh /var/www/アプリ名/*
0       /var/www/アプリ名/current
3.7G    /var/www/アプリ名/releases
78M     /var/www/アプリ名/repo
8.0K    /var/www/アプリ名/revisions.log
612M    /var/www/アプリ名/shared
```
releasesディレクトリの使用量が多そうですね。


```terminal
# ココだ！！！
$ sudo du -sh /var/www/アプリ名/releases/*
246M    /var/www/アプリ名/releases/20210228042850
246M    /var/www/アプリ名/releases/20210228043204
246M    /var/www/アプリ名/releases/20210228045446
246M    /var/www/アプリ名/releases/20210228050040
246M    /var/www/アプリ名/releases/20210228052141
247M    /var/www/アプリ名/releases/20210228072751
246M    /var/www/アプリ名/releases/20210228073303
246M    /var/www/アプリ名/releases/20210228073914
238M    /var/www/アプリ名/releases/20210228074136
246M    /var/www/アプリ名/releases/20210228081218
246M    /var/www/アプリ名/releases/20210228110414
246M    /var/www/アプリ名/releases/20210228110649
246M    /var/www/アプリ名/releases/20210228112045
246M    /var/www/アプリ名/releases/20210228112835
76M     /var/www/アプリ名/releases/20210301071924
191M    /var/www/アプリ名/releases/20210301110116
```

```
$ cd /var/www/アプリ名/releases
[**** releases]$ ls -la
合計 68
drwxrwxr-x 18 **** **** 4096  3月  1 11:01 .
drwxr-xr-x  5 **** ****   84  2月 28 05:23 ..
drwxrwxr-x 15 **** **** 4096  2月 28 04:29 20210228042850
drwxrwxr-x 16 **** **** 4096  2月 28 04:33 20210228043204
drwxrwxr-x 16 **** **** 4096  2月 28 04:56 20210228045446
drwxrwxr-x 15 **** **** 4096  2月 28 05:01 20210228050040
drwxrwxr-x 16 **** **** 4096  2月 28 05:22 20210228052141
drwxrwxr-x 15 **** **** 4096  2月 28 07:29 20210228072751
drwxrwxr-x 15 **** **** 4096  2月 28 07:33 20210228073303
drwxrwxr-x 15 **** **** 4096  2月 28 07:39 20210228073914
drwxrwxr-x 15 **** **** 4096  2月 28 07:42 20210228074136
drwxrwxr-x 15 **** **** 4096  2月 28 08:12 20210228081218
drwxrwxr-x 15 **** **** 4096  2月 28 11:04 20210228110414
drwxrwxr-x 15 **** **** 4096  2月 28 11:07 20210228110649
drwxrwxr-x 15 **** **** 4096  2月 28 11:21 20210228112045
drwxrwxr-x 15 **** **** 4096  2月 28 11:29 20210228112835
drwxrwxr-x 15 **** **** 4096  3月  1 07:19 20210301071924
drwxrwxr-x 15 **** **** 4096  3月  1 11:01 20210301110116
````

新しいもの３つ残し、それ以外は削除していきます。

```terminal
#とりあえず、一個削除してみる。
[**** releases]$ rm -rf 20210228042850
[**** releases]$ ls -la
合計 60
drwxrwxr-x 17 **** ****  336  3月  1 11:57 .
drwxr-xr-x  5 **** ****   84  2月 28 05:23 ..
drwxrwxr-x 16 **** **** 4096  2月 28 04:33 20210228043204
drwxrwxr-x 16 **** **** 4096  2月 28 04:56 20210228045446
drwxrwxr-x 15 **** **** 4096  2月 28 05:01 20210228050040
drwxrwxr-x 16 **** **** 4096  2月 28 05:22 20210228052141
drwxrwxr-x 15 **** **** 4096  2月 28 07:29 20210228072751
drwxrwxr-x 15 **** **** 4096  2月 28 07:33 20210228073303
drwxrwxr-x 15 **** **** 4096  2月 28 07:39 20210228073914
drwxrwxr-x 15 **** **** 4096  2月 28 07:42 20210228074136
drwxrwxr-x 15 **** **** 4096  2月 28 08:12 20210228081218
drwxrwxr-x 15 **** **** 4096  2月 28 11:04 20210228110414
drwxrwxr-x 15 **** **** 4096  2月 28 11:07 20210228110649
drwxrwxr-x 15 **** **** 4096  2月 28 11:21 20210228112045
drwxrwxr-x 15 **** **** 4096  2月 28 11:29 20210228112835
drwxrwxr-x 15 **** **** 4096  3月  1 07:19 20210301071924
drwxrwxr-x 15 **** **** 4096  3月  1 11:01 20210301110116
```
うまく削除出来ているようなので、他も削除していきます。

## 削除後

```terminal
[**** releases]$ ls -la
合計 8
drwxrwxr-x  4 **** ****   50  3月  1 11:59 .
drwxr-xr-x  5 **** ****   84  2月 28 05:23 ..
drwxrwxr-x 15 **** **** 4096  3月  1 07:19 20210301071924
drwxrwxr-x 15 **** **** 4096  3月  1 11:01 20210301110116
```

```
[**** releases]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         482M     0  482M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M   19M  473M    4% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  4.4G  3.7G   55% /
tmpfs             99M     0   99M    0% /run/user/1001

[**** releases]$ df -i
ファイルシス   Iノード  I使用   I残り I使用% マウント位置
devtmpfs        123170    284  122886     1% /dev
tmpfs           125862      2  125860     1% /dev/shm
tmpfs           125862    359  125503     1% /run
tmpfs           125862     16  125846     1% /sys/fs/cgroup
/dev/xvda1     4193216 155257 4037959     4% /
tmpfs           125862      1  125861     1% /run/user/1001
```
無事に容量が空き、デプロイできるようになりました。


# 今後の対策
デプロイの度にreleases出来るファイルは最新の３つまでしか残さない設定に変えます。
下記を、変更もしくは追加してください。

```config/deploy.rb
set :keep_releases, 3
```
これで安心です。