EC2、Laravel、Queueでメモリが足りなくて処理が止まってしまったときの解決方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Allowed memory size of 134217728 bytes exhausted (tried to allocate 1638400 bytes)
こんなエラーが出た時に確認してみて欲しい内容について書いた記事です。
環境
EC2
Laravel
supervisor
今回の場合だと、重い作業を非同期(Queue)で回しているときに発生しました。
結論
php の設定ファイルである php.ini で設定しているメモリの量をオーバーしてしまった可能性があります。
このエラー自体は、queue じゃなくても起きます。例えば、composer install とかでも。
対処法
①php.ini がどこにあるかを探す
php --ini
を打ちます。
ちなみに、僕は php7.4 を入れたので、
php74 --ini
で発見できます。
Loaded Configuration File: /etc/opt/remi/php74/php.ini
そうすると、php.ini の場所が判明しました。
PHP のバージョンが分からないとき
phpinfo()
という関数で色々確認することが可能です。
開発環境やテスト環境であればこれを使うのが一番早いと思います(本番環境では絶対にやらないです)
web.php に以下を記述
Route::get('aaaaaaa', function () {
dd(phpinfo());
return redirect()->route('login');
});
http://????/aaaaaaa
をたたけば情報が見られます。
その中に設定の php.ini ファイルの場所などが書かれています。
今回は、
/etc/opt/remi/php74/php.ini
にありました。
ファイルを編集する
さきほど調べたファイルの位置を vim で開きます。
sudo vim /etc/opt/remi/php74/php.ini
memory_limit = 128M
となっているところを、
memory_limit = 256M
に書き換えます。
vim の操作としては、
/memory
で検索ができます。
書き換えたら、
/wq
で保存してください。
アパッチの再起動をする
コマンド一発です。
sudo systemctl restart httpd
忘れやすい supervisor の再起動
queue で発生したメモリ不足は、queue を再起動しないと解決しません(忘れやすい)
supervisorctl restart all
queue がリスタートしました。
まとめ
以上が、メモリ不足のときの解決の流れとなります。
自分は supervisor のリスタートを忘れた数時間溶かしました。
なのに記事にするとなんと3行の内容!!!!
みなさんもぜひ気を付けてください。それでは。