Laravel

EC2、Laravel、Queueでメモリが足りなくて処理が止まってしまったときの解決方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。
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

で保存してください。

⇨EC2 などで使う、必要最低限の Vim 操作の方法

アパッチの再起動をする

コマンド一発です。

sudo systemctl restart httpd

忘れやすい supervisor の再起動

queue で発生したメモリ不足は、queue を再起動しないと解決しません(忘れやすい)

supervisorctl restart all

queue がリスタートしました。

まとめ

以上が、メモリ不足のときの解決の流れとなります。

自分は supervisor のリスタートを忘れた数時間溶かしました。

なのに記事にするとなんと3行の内容!!!!

みなさんもぜひ気を付けてください。それでは。