Edited at

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は不要になるので永続化の必要ありません。


参考記事