Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

参考記事

ucan-lab
Backend Developer at ROLO. I love PHP and I'm focusing on Laravel, Docker, GraphQL.
https://u-can.pro
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away