Composer updateのメモリ不足に対応する

こんにちは、小林です。

今回はLaravelのComposer updateでメモリ不足になった時の対応を書きたいと思います。

発端

いつも通りComposer updateを行ったところ、下記のエラーが出て更新が出来ませんでした。

PHP Fatal error:  Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleSetGenerator.php on line 129
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleSetGenerator.php on line 129

エラー内容をみるとメモリが足りないらしい。。 以前は何の問題もなくupdate出来たのに。

php.iniのmemory_limitを変更してみる

メモリーを上げれば良いだろうとphp.iniのmemory_limitを512Mに変更してみました。

vi /etc/php.ini
memory_limit = 512M

しかしながら、エラーが出てupdate出来ず。。

メモリの制限を無くしてComposerを実行する

こうなったらメモリの制限を無くせば良いだろうと、以下を実行しました。

php -d memory_limit=-1 /usr/local/bin/composer update

ところが、これでもメモリ不足のエラーが出ます。。。
どれだけメモリを使うのか。。

スワップメモリを作成する

メモリが足りないならと、スワップメモリを作成することにしました。

スワップメモリとはストレージ上にメモリの退避場所を用意してメモリが逼迫してきた時に一部の内容をそちらに移すことでメモリに空きを作る仕組みです。

まずスワップが無いことを確認

free -m

              total        used        free      shared  buff/cache   available
Mem:           1991         312        1552          15         126        1534
Swap:             0           0           0

次に作成

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

スワップの確認

free -m

              total        used        free      shared  buff/cache   available
Mem:           1991         312        1552          15         126        1534
Swap:          1023           0        1023

スワップが出来ていますね。

この状態でComposer updateを実行したところ、ようやくupdateが完了できました。

まとめ

LaravelのComposer updateはそれなりにメモリを消費するようですね。メモリ上限を開放してしたら成功した事例もネット上で散見したしたのですが 自分の環境では駄目。結局はスワップを作成して解決出来ました。 Laravelを導入するサーバーではあらかじめスワップを作成しておくべきだと勉強になった一件でした。