【メモ】composer updateがメモリ不足でエラーになる場合の対処法

PHP COMPOSER
composer updateを実行したときに次のようなエラーが出て失敗することがあります。


Fatal error: Out of memory (allocated 847511552) (tried to allocate 134217728 bytes) in
phar:///home/webuser/www/composer.phar/src/Composer/DependencyResolver/Solver.php
on line 223


要は composer update を実行するのにメモリが足りないということ。PHPに割り当てられているメモリがそもそも少ない場合には、増やしましょう。それでもダメな場合はサーバに乗せられているメモリが足りないってことです。メモリを増強すればもちろん解決出来ますが、このためだけに増強するのはコスト的に割が合わないので、現在の環境のままで解決したい。



Swapファイルを利用しましょう。

参考:メモリが足りないのでSwapファイルを作ってライブラリをインストールする – Qiita


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


簡単にいえば1MBのファイルを1,024個用意する=1GBのSwapファイルを用意するという意味になります。これを実施した上で、念のためhttpdを止めて実行すると成功率が上がります。


$ sudo service httpd stop
$ composer update
$ sudo service httpd start



それでも失敗するときは

長いことこれで成功していたのですが、あるときこの手順を踏んでも失敗するようになってしまいました。更新する要素が多いのか、それとも起動しているアプリケーションの問題かわかりませんが、結果的に以下のように対処したところ無事に成功しました。


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


前回との違いは、用意するSwapファイルの個数が1,024個から2,048個になっているところ。つまり用意するSwapファイルを1GBから2GBに増やすと。これをやってから composer update を実行するようにしたら失敗することはなくなり安定しました。時間は掛かる気がしますけどね。。



以上、メモでした。