PHPでComposerを使っていると、Allowed memory size of XXXXXX bytes exhaustedエラーが発生する場合があります。
本記事では、メモリ不足になったときの対象を説明します。
メモリ不足エラー時のエラーメッセージ例
以下が、メモリ不足が発生したときのエラー出力例です。
> compser update
...
PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted
Composerは内部的に多くのメモリを使用する場合があるため、PHPのインタプリタが使用できるメモリ量を増やす必要があります。このような場合は、phpのmemory_limit設定値を増やす必要があります。
memory_limitの確認,変更方法
実行環境でのmemory_limit設定値は、ini_get()関数で確認できます。コマンドラインからチェックする場合は、下記のように入力してみてください。
php -r "echo ini_get('memory_limit').PHP_EOL;"
128M
出力された使用可能メモリが少ない場合は、php.iniファイルにあるmemory_limitの設定値を修正してください。-1を指定すると指定すると制限なしになるので、問題の切り分けをしたい場合は一度-1にして確認するとよいです。
# php.iniファイルの定義
; Use -1 for unlimited or define an explicit value like 512M
memory_limit = -1
設定を変更したら再度ini_get()を実行し、設定内容が反映されているか確認してください。
composerをwebの管理ツールから実行している場合は、設定を反映させるためにWebサーバやphp-fpmの再起動が必要になる可能性があります。
php.iniの場所は、Debian系Linuxの場合は/etc/php5/cli/php.ini,Windowsの場合は、c:\php\php.iniに設置されていることが多いです。
php.iniを変更せずに、Composer実行のみメモリ使用上限を変更する
システムの設定を変えずに、Composerを実行時のみ設定値を変えたい場合は、以下のように-dオプションで指定することもできます。
php -d memory_limit=-1 composer.phar
cPanel使用時のメモリ制限を回避する
サーバ管理ソフトのcPanelを使用しているときに、メモリ不足の問題が起きる場合もあります。
この場合はcPanelのWebサイトでfork bombに関するドキュメントを参考にしてください。