AWS EC2, Cloud9 composer create-project でメモリ足りない問題の対策


AWS EC2 や Cloud9 で composer create-project コマンドでLaravelをインストールする際メモリ不足で失敗する場合があります。

環境

  • OS: CentOS7.6

Linuxであれば同様の手順でSwapを設定できると思います。

エラー

$ composer create-project --prefer-dist "laravel/laravel=5.8.*" .
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details

Swapがないことの確認

Swapを確認する方法は3つあります。(他にもあったら教えてください)

free コマンド

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            989          71         633          12         284         718
Swap:             0           0           0

Swap が 0 になっていること

/proc/meminfo

$ cat /proc/meminfo
(一部省略)
MemTotal:        1013196 kB
MemFree:          648760 kB
MemAvailable:     735956 kB
Buffers:               0 kB
Cached:           208092 kB
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB

SwapTotal と SwapFree が 0 になっていること

/proc/swaps

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority

Swapが結果に出てこないこと

swapファイル領域を確保

$ sudo /bin/dd if=/dev/zero of=/swap bs=1M count=1024

1024+0 レコード入力
1024+0 レコード出力
1073741824 バイト (1.1 GB) コピーされました、 12.9409 秒、 83.0 MB/秒
$ ls -lh /swap
-rw-r--r--. 1 root root 1.0G  8月  4 05:52 /swap

1G分の領域が確保されました。

パーミッションを変更

$ sudo chmod 600 /swap
$ ls -lh /swap
-rw-------. 1 root root 1.0G  8月  4 05:52 /swap

rootユーザーのみ読み書きできるようにします。

swapの作成(ファイルシステムをswapにする)

$ sudo mkswap /swap

スワップ空間バージョン1を設定します、サイズ = 1048572 KiB
ラベルはありません, UUID=8bf61268-456b-4bd4-a9ac-9adf03415098

swapの有効化

$ sudo swapon /swap

Swapがあることの確認

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            989          68          80          12         840         718
Swap:          1023           0        1023

/proc/meminfo

$ cat /proc/meminfo | grep Swap
(一部省略)
MemTotal:        1013196 kB
MemFree:           82220 kB
MemAvailable:     735656 kB
Buffers:               0 kB
Cached:           768612 kB
SwapCached:            0 kB
SwapTotal:       1048572 kB
SwapFree:        1048572 kB

/proc/swaps

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/swap                                   file            1048572 0       -2

Laravelのインストールを再実行する

$ composer create-project --prefer-dist "laravel/laravel=5.8.*" .

問題なくインストールできればokです。

Swap領域の無効化

$ sudo swapoff /swap
$ sudo rm /swap

Swap領域を残しておくとそれだけディスク容量を使ってしまうので、今度はディスク足りない問題が発生するかもしれません。(デフォルト8GBだったと思うので)

今回はSwap領域を無効化、Swapファイルの削除をしておきましょう。

補足

swapの永続化

システムを再起動した場合、swap領域が無効化されてしまいます。
永続化するためには、viなどで /etc/fstab を開き下記の1行を追記する必要があります。

/swap swap swap defaults 0 0

今回は composer create-project コマンド実行時にエラーとなったので、インストールできたらswapは不要になるので永続化の必要ありません。

参考記事