composerとmemory_limit


はじめに

composerによるmemory_limit設定の扱いについて。

memory_limit設定

現行バージョンの1.8.5では以下のようになっています。

  • もし現在のmemory_limitの設定値が1536M未満なら、composerが自分で1536Mに増やします
  • COMPOSER_MEMORY_LIMIT環境変数による指定があればその値で設定します

したがって、メモリ不足のエラーが Allowed memory size of XXX bytes exhausted...だったときはphpの-d memory_limit=XXオプションを使ったり、COMPOSER_MEMORY_LIMIT環境変数によってmemory_limitの制限を緩めて再実行すると思いますが、1536Mより小さな値では意味がありません。1.5GBでだめならもう次に試すのは制限無しの-1でいい気がします。

余談: Out of memory

同じメモリ関係のエラーでもOut of memoryのときはOSからメモリをもらえなかったので、PHPの設定は関係ありません。ulimitで制限してないか確認するとかメモリ食ってるプロセスをいったん殺すとかスワップ追加とかそういう対応になります。

おわりに

それにしてもどうしてこんなにcomposerはメモリ食いなんだろう?