composer requireでメモリサイズエラー
dockerでcomposer requireを行った時に、下記のエラーが発生しました。
許容メモリサイズ1610612736バイトを使い果たしたとのこと…
こちらのエラーについて、一時的な対応方法と恒久的な対応について記載しています。
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223
一時的にエラーが起きないようにする
まず、whichコマンドで、composerコマンドの場所を確認します。
$ which composer
下記のように、/usr/bin/composer
にあることがわかりました。
環境によっては置いてある位置が違うかと思います。
/usr/bin/composer
phpコマンドを使用して、-d
オプションをつける事によりメモリ制限を設けずに実行します。
下記のように、コマンドを実行すると、メモリサイズのエラーが出ずに実行できます。
$ php -d memory_limit=-1 /usr/bin/composer require [パッケージ名]
PHPのマニュアルをみると、-d
オプションについては下記のように書いています。
このオプションにより php.ini で指定できる設定ディレクティブに カスタム値を設定することができます。構文は以下のようになります。
公式のPHPオプションマニュアルはこちらです。
php.iniのメモリ制限(memory_limit)を一時的に無制限にして対応しているという事ですね。
エラーが起きないようにメモリ制限を設定する
一時対応ではなく、恒久的に対応する場合は、memory_limitの制限を増やせばOKです。
php.iniの場所を探します。
$ php -i | grep ini
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
/usr/local/etc/php/php.ini
にあることがわかりました。
vimエディタなどで開いてmemory_limit項目を下記のように設定します。
memory_limit=3000M
必要な分だけ設定するといいかと思います。今回は3000MBにしてみました。
memory_limit項目の初期値は128MBになっています。
あとは通常通りcomposer requireを実行すればOKです。
memory_limit
は画像のアップロードなどにも関係してくる設定ですので、気をつけて設定したいところですね。
コメント