Help us understand the problem. What is going on with this article?

composer require時に起きたメモリー制限エラーとその解決策

はじめに

画像投稿機能を実装する際に、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とするだけ。

php.ini
; 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

メモリーが足りないと。調べてみるとスワップの設定をすることで解決できる。
やり方は下記サイトを参考にしました。

参考:Amazon Linux2のswap領域を拡張する

スワップとは?

メモリの中身をハードディスクに移す機能。メモリが足りないときに行われる。
参考:swap

まとめ

今回は、composer require時に起きたメモリー制限エラーとその解決策について紹介しました。

以上

sasao3
日々の学習を記録するために、Qiitaで少しずつ発信していきます。 間違い、ご指摘がありましたら教えていただけますと嬉しいです。 最近は主にPHP/Laravel・AWS・Docker・Vue.jsを学習しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away