ホーム
Sponserd by↑転職したい人向け、ベンチャー企業の採用動画があります

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

タイトルの通りです。

AWS の EC2、Laravel での環境となります。supervisor を使っています。

重い作業を非同期(Queue)で回しているのですが、

Allowed memory size of 134217728 bytes exhausted (tried to allocate 1638400 bytes)

というエラーが出ました。

これは、つまり、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

をたたけば情報が見られます。

1行書き換える。 さきほど調べたファイルの位置を 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行の内容!!!!

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