こんにちは、小林です。
今回は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を導入するサーバーではあらかじめスワップを作成しておくべきだと勉強になった一件でした。