みなさん、こんにちは。どんぶラッコです。
今回はLaravel を開発している時に、メモリサイズオーバーのエラーにぶち当たってしまった場合の対処方法です。
composer
コマンドを使ってコードをインストールしようとしたら、こんなエラーにぶち当たってしまうことあるんじゃないでしょうか?
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes)
今回はこのエラーが発生してしまう原因と、その対処方法についてお話しします!
PHPのメモリ不足だよ!
結論から言うと、これはLaravelのエラーではなく、それを実行しているPHP側のエラーです。
メモリとは、主記憶装置(メインメモリ)とも呼ばれ、ざっくり言うとアプリケーションやプロセスが実行している際のデータや作業内容を預かってくれる場所です。
こちらのサイトが解説しているように、勉強机で例えると分かりやすいと思います。勉強机自体の大きさ(=メモリ容量)は決まっているので、各プロセスは仲良く机を使っています。
もし、一つのプロセスがメモリという机を占有してしまったら? …他のプロセスが使えなくなってしまいますよね。
そういうことを防ぐために、PHPはPHPで使えるメモリの最大量を自分で設定しているのです。
今回のエラーは PHPが”自分で設定した量以上のメモリを使おうとしているよーーー”という警告だった、というわけです。
対処方法
1. php.iniを書き換える
対処法としては、まず php.ini
を書き換えることが挙げられます。
iniファイルの場所は php --ini
で検索できます。
$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/8.0
Loaded Configuration File: /usr/local/etc/php/8.0/php.ini
Scan for additional .ini files in: /usr/local/etc/php/8.0/conf.d
Additional .ini files parsed: /usr/local/etc/php/8.0/conf.d/ext-opcache.ini
今回の場合だと /usr/local/etc/php/8.0/php.ini
を編集することになります。
memory_limit
と書いてある場所があるのでここを書き換えればOKです!。
; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit = 128M
2. コマンドに含めてしまう
iniファイルを書き換えるのは面倒くさい…でも今回だけ許したい…のような場合は、コマンドオプションとして含めることもできます。
例えば、
composer require hoge
を実行したい場合は
php -d memory_limit=512M /usr/local/bin/composer require hoge
のようにしてあげると実行ができます。
$ which composer
/usr/local/bin/composer
困李ごとが解消できたら幸いです!