はじめに
画像投稿機能を実装する際に、AWSのS3に画像を保存するため
league/flysystem-aws-s3-v3
をインストールしようとした際にこちらのエラーが出ました。
エラー文
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Compose
r/DependencyResolver/RuleSetGenerator.php on line 129
メモリーが使い果たされて足りないとのこと。
解決策
インストール時にメモリーを一時的に解放してあげることで解決できる。
まず、現在割り当てられているメモリーを下記コマンドで確認してみる
$ php -r "echo ini_get('memory_limit').PHP_EOL;"
結果、512M
であった。
実際に、メモリ設定の制限を解除するために以下のコマンドを実行。
COMPOSER_MEMORY_LIMIT=-1 composer require 入れたいパッケージ名
COMPOSER_MEMORY_LIMIT=-1
でメモリの制限を解除しているとのこと。
あくまでも一時的なものなので、メモリーが足りない際はその都度解放してあげればできる。
自分の場合、環境変数周りの設定が原因でコマンドが使用できず、解決できなかった。
[上記コマンド実行時]
'COMPOSER_MEMORY_LIMIT' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
別のやり方でもできるため、こちらのやり方についても紹介します。
やることは、php.iniファイルにてmemory limit=-1
とするだけ。
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit=-1
しかし、自分は***「php.iniファイルはどこだっけ?」***と困りました。
こちらのコマンドで確認できます。
$ php --ini | grep "php.ini"
参考
・Laravel composer ライブラリインストール時のメモリエラー
・php.iniファイルの場所をターミナルで確認する
本番環境
本番環境でインストールする際にも、同様にエラーがでました。
同じ設定を行ったが別のエラーがでました。
mmap() failed: [12] Cannot allocate memory
メモリーが足りないと。調べてみるとスワップの設定をすることで解決できる。
やり方は下記サイトを参考にしました。
スワップとは?
メモリの中身をハードディスクに移す機能。メモリが足りないときに行われる。
参考:swap
まとめ
今回は、composer require時に起きたメモリー制限エラーとその解決策について紹介しました。
以上