🌊

composer requireしてメモリ不足でFatal errorになったとき

2021/07/23に公開

サーバースペック

CentOS:7
PHP:7.2.12
Composer:1.10.6

エラー内容

composer update

コマンドを実行したところ、下記エラーが出力された。

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in /usr/share/php/Composer/DependencyResolver/RuleWatchGraph.php on line

これはphpスクリプト実行時にphp.iniにて割り当てられている以上のメモリが使用されたときに表示されるとのこと。なので、php.iniの割り当てメモリを増やせばエラーにならず実行できる。

php.iniの場所をこのコマンドで確認。

php --ini

確認後、php.iniをvimで開き、MEMORY_LIMITで検索。

vim {directory_path}php.ini

{directory_path}にはphp --iniで確認したパスを記入。
vimを開いたのち、/で検索モードにし、MEMORY_LIMITと入力する。
該当する行テキストがハイライトされる。

MEMORY_LIMIT=128M

制限なくメモリを使用できるようにするには 128Mの部分を -1に設定する。
ただし、この場合phpで実行する全てのスクリプトが無制限でメモリを使えるようになってしまう。
重め処理が走ったときにマズイかもしれない。
ならphp.iniを直接編集するのではなく、composer実行時にのみ-1の指定をできればいいのでは?

composer実行時にのみ-1の設定をする方法

COMPOSER_MEMORY_LIMIT=-1 composer {command}

こうすることで、php.iniを変更せずに必要な時だけ一時的に無制限して実行できる。

Discussion