Composerの更新メモリ制限


96

ホスティングでcomposerupdateを実行する必要があるため、sshでログインして、次のコマンドを実行してみます。

composer update

Laravelとcomposerがインストールされている/ wwwフォルダー内

しかし、エラーが発生します:

ここに画像の説明を入力してください

私のホスティングプロバイダーと連絡を取り、彼らは私にコマンドを実行するように言います:

php -d memory_limit=512M composer update

このコマンドを実行しましたが、「ファイルを開けませんでした:composer」というメッセージが表示されます。

何をすべきか?ここでの解決策は何ですか?


2
@Svenが言ったように、本番環境composer installで十分です。あなたの場合、共有ホスティングを使用している間は機能しないと思うcomposer updateので、唯一の方法はDigital Ocean、LinodeのようなVPSホスティングを購入することです。
ルーカスシルバ

回答:


143

を実行するcomposer updateと、OSは構成されたパスを調べて、その名前の実行可能ファイルを見つけようとします。

を実行するphp composer updateと、composer文字列はPHPのパラメータとして扱われ、どのパスでも検索されません。実行するには、フルパスを指定する必要があります。

実行which composerすると、OSがcomposer実行可能ファイルを見つける場所がわかり、PHPコマンドでフルパスを使用するだけです。

$>which composer
/usr/local/bin/composer

$>php -d memory_limit=512M /usr/local/bin/composer update
...

512MBは少なすぎる可能性があることに注意してください。私の認識では、使用する依存関係の数と理論的に許可するバージョンの多様性に応じて、1GB以上かかると思います。つまり、Symfonyを許可する~2.3と、Composerは使用するよりもはるかに多くの可能なバージョンを処理できるようになります。~2.7

また、本番マシンでComposerを実行することは最善の方法ではないことにも注意してください。Githubにアクセスできる必要があり、アクセス資格情報を提供し、VCSツールをインストールする必要があります。更新中にリモートホスティングサーバーのいずれかがオフラインになると、サイトが簡単に破損します。すべての準備を行ってから、すべてのファイルを運用サーバーに移動するデプロイメントシステムでComposerを使用することをお勧めします。

更新

今は2020年であり、Composerがメモリを管理する方法はかなり変わりました。最も重要なことは、制限が低すぎる場合、Composerが自動的にメモリ制限を増やすことです。ただし、これにより、インストールされているメモリが少なすぎるマシンでメモリが不足するという問題がすぐに発生します。のような環境変数を設定することで、Composerが使用するメモリを減らすことができますが、ComposerCOMPOSER_MEMORY_LIMIT=512Mが正しく動作するためにより多くのメモリが必要な場合、これにより問題が発生します。

私の要点は真実です。インストールされているメモリが少なすぎるマシンでComposerを実行しないでください。すべてを更新するには、1.5GBの空きメモリが必要になる可能性があります。


php -r "readfile( ' getcomposer.org/installer');" | phpとその後、すべてが正常に機能します...また、助けを求めて
Andrew

41
php -d memory_limit=-1 $(which composer) updateコンポーザーパスを指定する必要がないため、より便利です。
ラックス

1
これは素晴らしい。1つのコマンドでメモリを増やすことができるとは知りませんでした。それが正しいことですか?
plushyObject

どのようにウィンドウズで?
レイ

1
@Raxもう1つ、mingwのWindowsでこのコマンドを実行すると、パスを変換する必要があるというエラーが表示されるため、このコマンドを使用してくださいphp -d memory_limit=-1 $(which composer).phar update
Faizan

155

必要なだけメモリを使用するように設定します。

COMPOSER_MEMORY_LIMIT=-1 composer update

この値または任意の値をグローバルに設定するにはどうすればよいですか?CLIを介して毎回これを行う必要はありませんか?
snh_nl

@snh_nlphpのメモリ制限を設定する必要があります。例:chapterthree.com/blog/how-fix-composer-memory-issue
jasonflaherty

2
/ etc / profile(または使用するシェル)でCOMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT。を使用してグローバルに定義します。または、シェルエイリアスを定義しますか? alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer'、その後、使用memcomposerの代わりにcomposer
diamondsea

それはまだ言いますFatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
OzanKurt20年

15

使用可能なすべてのメモリを消費するため、composerで問題が発生し、プロセスが強制終了されます(実際には、出力メッセージは「強制終了」です)

そこで、composerのメモリ使用量を制限するソリューションを探していました。

私は試しました(@Svenの回答から)

$ php -d memory_limit=512M /usr/local/bin/composer update

しかし、それはうまくいきませんでした

「Composerは内部的にmemory_limitを1.5Gに増やします。」

->それは作曲家の公式ウェブサイトからのものです。

次に、機能するコマンドを見つけました:

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update

しかし、私の場合、512mbでは十分ではありません!

ソース:https//www.agileana.com/blog/composer-memory-limit-troubleshooting/


1
私は次のようにcomposerを使用する必要がありました:COMPOSER_MEMORY_LIMIT = 1024M Composer require'module '
jasonflaherty

1
同様に、私が使用COMPOSER_MEMORY_LIMIT=-1 composer require <package name>
realtebo

13

私は組み合わせる必要がCOMPOSER_MEMORY_LIMITありましたmemory_limitコマンドラインでました:

Windowsの場合:

set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update

Linuxの場合:

export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update

これは、Mac OS X ElCapitanで私のために働いた唯一のものです。
ymd_


8

十分なメモリがある場合、composerは内部でそれを消費し、問題なく実行されます。作曲家にそれをするように特に指示する必要はありません。

スワップメモリ​​を増やしてみましたか、それは私のために働きました。スワップメモリ​​を4096Mb(4GB)に増やしましたが、今ではすべてが見栄えがします。

最初に「sudo free」を使用して、使用可能なメモリとスワップメモリ​​を確認します。スワップを次のように構成します。

Debianの場合:

sudo fallocate -l 4G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=4096k count=1048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

永続的にするには、これを/ etc / fstabファイルに追加します。 /swapfile swap swap defaults 0 0

CentOSの場合:

[root@myserver]:/# cd /var
[root@myserver]:/var# touch swap.img
[root@myserver]:/var# chmod 600 swap.img
[root@myserver]:/var# mkswap /var/swap.img

[root@myserver]:/var# dd if=/dev/zero of=/var/swap.img bs=4096k count=1000
[root@myserver]:/var# mkswap /var/swap.img 
[root@myserver]:/var# swapon /var/swap.img

物理ボリュームサイズに応じて、bs = 1024kまたは2048kまたは8096kを変更することでスワップメモリ​​を増やすことができます。'swapon'コマンドとswapoffコマンドを使用して、違いを確認してください。

'swappiness'を確認してください(60で十分です)

cat /proc/sys/vm/swappiness

5

あなたは変更することができます memory_limitphp.iniの値をます

php.iniファイルの制限を増やしてみてください

無制限の場合は-1を使用するか、2Gのような明示的な値を定義します

memory_limit = -1

注:Composerは内部的にmemory_limitを1.5Gに増やします。

ドキュメントgetcomposer.orgを読む


3

MAC OS High Sieraで、私は以下を実行しました。

MacBook-Pro:asiu jack$ php --ini

戻ってきた:

Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext- 
opcache.ini,
/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

上記のすべての回答は、更新を行うロードされた構成を設定していますが、解析された追加の.iniファイルにはphp-memory-limits.iniが別のファイルとして含まれていることに注意してください。このファイルのメモリ制限も更新する必要があります。同じようにテキストエディタで開き、2Gのようなものに変更します。メモリ制限の失敗時の出力は、実行する必要のあるメモリの量を示しているはずです。それよりも高く設定するか、無制限の場合は-1に設定してください。


2

このエラーは、特に大規模なライブラリや依存関係の多いライブラリを更新する場合に発生する可能性があります。Composerは、メモリをかなり消費する可能性があります。

コンポーザー自体が最新バージョンに更新されていることを確認してください。

php composer.phar --self-update

コンポーザーのメモリー制限環境変数を追加することにより、コンポーザーのメモリー制限を一時的に増やすことができます。

COMPOSER_MEMORY_LIMIT=128MB php composer.phar update

メガバイトの場合は「128M」、ギガバイトの場合は「2G」の形式を使用します。値「-1」を使用して、メモリ制限を完全に無視できます。

別の方法は、PHPのメモリ制限を増やすことです。

php -d memory_limit=512M composer.phar update ...

2

私はこれをWindows10で作成し、一緒に作業しました。

php -d memory_limit=-1 C:/ProgramData/ComposerSetup/bin/composer.phar update

必要なxx値を変更できます

 memory_limit=XX

1

AWSサーバーのサイズはどれくらいですか?RAMが1GBしかない場合、php.iniで2GBのメモリ制限を設定しても効果はありません。

より多くのRAMを使用できるようにするためにサーバー側も増やすことができない、またはしたくない場合は、SWAPを有効にすることもできます。

スワップを有効にする方法については、こちらをご覧ください私は通常1GBしか実行しませんが、4GBを有効にします。

出典:laracastサイトから入手


0

私の場合、答えはどれも役に立ちませんでした。最後に、64ビットバージョンのPHP(M $ Windows)に変更すると、問題がすぐに修正されたことが判明しました。私は設定を変更しませんでした-それはただ機能しました。


0

私はHomesteadでLaravel6を実行していますが、この問題も発生しました。他の回答でここに示唆されているCOMPOSER_MEMORY_LIMIT=-1ように、単一のコマンドの前にプレフィックスを付けて、コマンドを通常どおり実行できます。PHP構成を更新して、常に無制限のメモリを許可する場合は、次の手順に従ってください。

vagrant up
vagrant ssh
php --version # 7.4
php --ini # Shows path to the php.ini file that's loaded
cd /etc/php/7.4/cli # your PHP version. Each PHP version has a folder
sudo vi php.ini

memory_limit=-1php.iniファイルに追加します。Vimの使用やphp.iniファイルの編集で問題が発生した場合は、Vimでphp.iniファイルを編集する方法についてこの回答を確認してください。ファイルは次のようになります。

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit = -1

これにより、マシンのメモリが無限に消費される可能性があることに注意してください。おそらくプロダクションには良いアイデアではありません笑。Laravel Valetでは、この記事に従いここでメモリ値を更新する必要がありました。

sudo vi /usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

次に、Valetを使用してサーバーを再起動します。

valet restart

この回答は、MacでLaravel Valetを使用して構成を変更し、変更を有効にする場合にも役立ちました。


0
<C:\>set COMPOSER_MEMORY_LIMIT=-1
<C:\>composer install exhausted/packages

3
他の人がそれから学ぶことができるようにあなたの答えに、いくつかの説明を追加してください
ニコハーゼ



0

Laravelの場合

手順1.ターミナルを開きます

ステップcd2.laravelディレクトリに

ステップwhich composer3.laravelディレクトリにコマンドを入力し、composerが存在するディレクトリをメモします。

手順4.コマンドを実行しphp -d memory_limit=-1 /opt/cpanel/bin/composer updateます(機能する場合はコードを実行することもできます)

/opt/cpanel/bin/composer手順3で返されたディレクトリパスに変更します)

問題が解決しました


0

Windows 10(Git bash)では、これを使用する必要がありました

php -d memory_limit=-1 C:\\composer\\composer.phar install

-1

私の場合、このメモリ制限の増加に伴い、より高い権限が必要でした。

sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar update

Composerをsudoで実行すると、権限が混同されるため、お勧めできません。これはcomposer updateサーバー上で実行しているように見えます-計算された依存関係をバージョン管理下に置くことははるかに異なるため、これも悪い習慣です
Nico Haase 2010年

@NicoHaaseに同意します。これを使用する場合は、十分に注意する必要があります。ありがとう。
NaserNikzad20年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.