PHP Composerの更新「メモリを割り当てられません」エラー(Laravel 4を使用)


168

これは解決できません。

私はLinode 1G RAMの基本プランにいます。Composer経由でパッケージをインストールしようとすると、許可されません。PHP.iniでメモリ制限が「-1」に設定されています

これをインストールするために他に何かできることはありますか?

Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing thujohn/rss (dev-master df80a7d)
    Downloading: 100%         
PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975

Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975

回答:


96

少し古いですが、新しい誰かが解決策を探している場合に備えて、PHPバージョンを更新することで問題を解決できます。

また、リソースをあまり消費しない本番環境でcomposer.lockファイルをコミットし、composerをインストールする必要があります。

詳細はこちら:https : //github.com/composer/composer/issues/1898#issuecomment-23453850


12
鮮やかさ!うまくいきました。PHPはアップグレードしませんでしたが、composer.lockファイルをコミットして更新すると、すべてが正しくインストールされました。ありがとうございました。
ericbae 2013年

6
パーティーには遅れましたが、私は単にApacheとMySQLをオフにしました。512MBのRAM VPSを使用しているのには理由があります。お金を使いたくないのです。
Kumar

11
PHPの更新は解決策ではありません。7.0.21を使用していますが、まだこのエラーが発生します。
cj5 2017

@クマールの解決策は私のために働いた。非常に簡単で、ほとんどのことと同じように、後から明らかです:)
James Bridgewater

どうもありがとう。時間を大幅に節約できました。
ジェイギース

404

スワップメモリ​​が不足しているようです。これを試してください

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

以下のコメントで@ BlackBurn027によって言及されているように、このソリューションはここで説明されていました


27
あなたはサー、天才です-それはphpの問題ではなく、ファイルを削除しても役に立ちません。私のVPSで(sudoを使用して)指示に従う必要があります。これは、VPS所有者にとってここで役立つ唯一の回答です。
2015

4
getcomposer.org/doc/articles/...としてソースによって言及
BlackBurn027

1
これは私にとってはうまくいきましたが、それらのコマンドが実際に何をしているのか混乱しています、誰かがそれらを説明できますか?
ジョセフアストラハン2017

2
1024では不十分な場合があります...代わりに2048を使用してください
psylosss

1
あなたが永続的なスワップを行うことができます@JaberAlNahianこちらをご確認ください digitalocean.com/community/tutorials/...
モハメド・オマール

78

作曲のトラブルシューティングガイドとしてここに VPSがメモリ不足して有効に何のスワップ領域を持っていないので、これは起こることができます。

free -m

スワップを有効にするには、たとえば次のように使用できます。

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1

または、上記が機能しない場合は、スワップファイルを作成してみてください

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

php5からphp7にアップグレードせずに、これは
うまくいき

LinuxのCLIで実行する必要があります
Umair Hamid '14

再びエラーが発生しましたが、その後のcomposer updateの実行は問題なく機能しました。
アミールハジハ

[公式ドキュメント] [2] getcomposer.org/doc/articles/…
Thilina Dharmasena

38

私は同じ問題に直面しました。メモリが少ないAWS Free Microinstanceを使用しています。私は常に以下のオプションのいずれかを試し、それは常に機能します(すべての前に、composerの最新バージョンがインストールされているかどうかを確認してください)

sudo php -dmemory_limit=750M composer.phar update

または、ベンダーフォルダーの内容を削除して、composerの更新を試みます。

sudo rm -rf vendor
sudo php -dmemory_limit=750M composer.phar update --no-scripts --prefer-dist
sudo php artisan --dump-autoload

2番目のオプションは、すべてのコンポーネントの更新を試みます。更新がない場合は、キャッシュからパッケージを取得します。それ以外の場合は、distから取得します。

注:選択に従ってメモリ制限を変更してください。

または

スワップパーティションを作成してみてください。スワップパーティションは、物理メモリが不足したときにLinuxが仮想メモリとして使用するハードドライブの一部です。これは、実際のファイルを使用する代わりに、Windowsスワップファイルに似ていますが、Linuxは、代わりにハードドライブのパーティションを使用します。

お役に立てれば


1
メモリ制限を500Mに下げ、composerが必要なものをインストールしました。
devNoise 2013

パーティションの代わりに実際のスワップファイルを使用することもできます。cyberciti.biz/faq/linux-add-a-swap-file-howtoを
rwilson04

2
2
億5000万

tristanbaileyあなたの解決策はうまくいきました、ありがとう!mysqlとapacheを停止する前に、phpのメモリ制限を設定しても更新できませんでした。
エリアスKouskoumvekakis 2015

私は実行するとsudo php -dmemory_limit=750M composer.phar update 、私はこのエラーましCould not open input file: composer.phar助けてください
VARUN Naharia

15

簡単に、次のコマンドを入力します。

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

メモリの少ないマシンで動作するはずです


私のために働いた。私はこっちの包括的な答えを書かれている- stackoverflow.com/questions/26850332/...
halkujabra

動いていない。そして、これは私のすべてのベンダーフォルダを削除しました。それは間違っています!
ウラジミールコヴァルチュク2016年

ベンダーを削除する問題は何ですか?もう一度インストール/更新を実行してください...
2016年

1
ベンダーを削除することは完全に間違っているわけではありませんが、インストールがまだ機能しない場合はサイトを破壊し、破壊された状態に保ちます。ただし、本番マシンのロックファイルを削除することはお勧めしません。あなたはあなたのロックファイルをコミットし、インストールではなく、更新ではないはずです。実際、ロックファイルを削除することで、Composerにjsonファイルからのインストールを強制することになります。jsonファイルは、メモリを集中的に使用するプロセスの元になる場所(インストールするバージョンの決定)です。
Shauna 2017

本番環境でない場合は、コンポーザーがインストールを完了するまでプロジェクトが中断されるため、これに従うことは問題ありません
Bizarro

11

問題を修正するための手順は次のとおりです:(使用される即時の高速SWAPファイル割り当て方法)

サーバーSWAPセットアップ(Ubuntu 16.04 SWAPによるメモリ不足エラーの修正)

スワップ、メモリおよびディスクサイズがすでにあるかどうかを確認します。

    sudo swapon -s
    free -m
    df -h

スワップファイルを作成します(4GBのスワップメモリ​​が必要な場合は、1Gを4Gに変更します)。

    sudo fallocate -l 1G /swapfile 

スワップファイルを確認します。

    ls -lh /swapfile

スワップファイルを割り当て:

    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile

スワップOK、メモリ、ディスクサイズを確認します。

    sudo swapon -s
    free -m
    df -h

システムの再起動時にスワップファイルを添付:

    sudo nano /etc/fstab
        /swapfile   none    swap    sw    0   0

スワップファイルの設定を調整します。

    cat /proc/sys/vm/swappiness
    cat /proc/sys/vm/vfs_cache_pressure

    sudo sysctl vm.swappiness=10
    sudo sysctl vm.vfs_cache_pressure=50

    sudo nano /etc/sysctl.conf

SWAPファイルの優先度:(0-100%=> 0:スワップを行わない、100:SWAPを実行してRAMを解放する)

        vm.swappiness=10

キャッシュからiノードを削除:(100:システムがキャッシュからiノード情報を削除するのが早すぎる)

        vm.vfs_cache_pressure = 50

私は最後のステップsudo nano /etc/sysctl.confで何をしなければならないのかわからないので、スキップしてNginxを再起動してからcomposer install(以前はベンダーディレクトリを削除しました)、それは機能しています。ありがとう!
アラキム

10

浮浪者についても同じ問題がありました。allcateより多くのメモリを修正しました。

 config.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024"]
 end

1
私もこの問題を解決しました。vagrant 2.xでは、代わりにvb.customize ...できることに注意してくださいvb.memory = 1024
acobster

10

試す

それは基本的にスワップメモリ​​を増やしています

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 && sudo /sbin/mkswap /var/swap.1 && sudo /sbin/swapon /var/swap.1


6
他の人がそれから学ぶことができるように、あなたの答えにいくつかの説明を加えてください。
Nico Haase

これはもっと詳しい説明があるはずだと私は同意しますが、私にとってはうまくいきました(基本的にはスワップメモリ​​を増やすことです)。ありがとう!
user1015214

8

それを試してください:

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

1
他の人がそれから学ぶことができるように、あなたの回答にいくつかの説明を追加してください-特に:同じアプローチを使用する他の回答と比較して何を変更しましたか?彼らの答えを複製する必要はありますか?
ニコ・ハーセ

7

これは私がいつもうまくいくことがわかった回避策です:

df -h 
dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo 'echo "/swapfile  none  swap  defaults  0  0" >> /etc/fstab' | sudo sh

free -m

confirm u see your swap there:
total used free shared buffers cached
Mem: 494 335 158 0 19 62
-/+ buffers/cache: 254 240
Swap: 1023 3 1020

watch free -m

5
すごい、何をするのか説明せずにコマンドを投稿するのはおそらく危険です!私はそれがほとんどのシステムで動作することを断言できます。基本的に、HDをRAMとして使用できるように、スワップ空間を割り当てて作成します。これは、各コマンドを説明する方法の包括的なガイドです。digitalocean.com
tutorials

コマンドを明確にしていただきありがとうございます。スクリプトを実行する前に、スクリプトが実際に何をするかを知っておくと便利です。しかし、同じように、デジタルオーシャンとチュートリアル/ブログ投稿をどのように宣伝しているかはよくありません。
ゴラン

チュートリアルは素晴らしく、説明付きで段階的に示しています!
Tarik、2017

ありがとうございました!1GB RAMサーバー用のDrupal Prestoをインストールするのに役立ちます。私は、1024〜2048です。変更する必要があり
Nikit

7

ベンダーフォルダーcomposer.lockファイルを削除するだけで、コマンドcomposer clear-cacheを実行しましたcomposer install。したがって、エラーなしで機能します。


6

以下を使用して空き(スワップ)メモリを確認できます

free -m

total used free shared buffers cached

Mem: 2048 357 1690 0 0 237
-/+ buffers/cache: 119 1928
Swap: 0 0 0

スワップを有効にするには、たとえば次のように使用できます。

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

free -mはメモリを使用しておらず、スワップにもメモリがないことに気づきました。その後、メモリがsudo reboot機能しました
Eleazar Resendez

4

これは、1GB以下のサーバーインスタンスで繰り返し発生する問題のようです。プロセスをシャットダウンしてスワップ設定を微調整する以外に、ローカルマシンにインストールしてアップロードすることができます。


1
うん。おかしいのは、プロジェクト全体を削除し、新しいgit pullを実行してからcomposerをインストールすると、動作するようです。奇妙な。
ericbae 2013

苛立たしいことに、私はいくつかのL4プロジェクトを1GBのLinodeインスタンスにデプロイしていて、メモリの上限に達することを心配しています。
マキタ

古いリンクですが、役に立つかもしれません:github.com/composer/composer/issues/1104
マキタ

2
受け入れられた答えはまだ行くための最良の方法です。composer.lockをコミットしてから、更新ではなくインストールを本番サーバーで実行する必要があります。
マキタ

3

時には、自己更新型の作曲家が問題を解決します

php composer.phar self-update

乾杯


これは、問題を修正しようとする最初のことです。1.3.3で問題がありましたが、1.4.0に自己更新すると問題が解決しました。ヒント:composer self-updatecomposerにあまり慣れていない人がこの返信を読む場合は、回答を更新してのユースケースもカバーすることができます。
Niklaus 2017年

名前が変更されたときに権限が拒否される
Andrew

3

これを試して:

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

Centos 6でのこの作業


これはAWS Opsworks EC2インスタンスUbuntu 14.04で私のために働きました!ありがとう!
Paul Preibisch

3

PHP memory_limitをデフォルトの128Mから512Mに増やし、サーバーを再起動しました。それで問題は解決しました。


3
PHPはサービスとして実行されないため、再起動は必要ありません。
HelpNeeder 2017

1
いいえ、Apacheが実行するため、有効にするために再起動する必要があります...
非推奨

1
Apacheがphpモジュールをロードするときに必要です
Aris

2

私はほとんどの場合この状況に陥るため、通常はスワップメモリ​​を設定する手順を実行していました。

しかし今私は私のために働いた単純な代替トリックを見つけました。

composer update --no-dev以外を実行 composer update


2

Vagrantで同じ問題を解決しました。memory_limitの値を増やし、 composerキャッシュを削除します:sudo rm -R〜/ .composer そして最後にvagrant reload。



1

スワップを作成し、composerコマンドを再度実行します。うまくいくと思います。

 $ dd if=/dev/zero of=/swapfile bs=1024 count=512k
 $ mkswap /swapfile
 $ swapon /swapfile
 $ echo "/swapfile       none    swap    sw      0       0 " >> /etc/fstab
 $ echo 0 > /proc/sys/vm/swappiness
 $ chown root:root /swapfile
 $ chmod 0600 /swapfile

1

私の場合、私は上記のすべてを試しました。私は4GBのメモリとスワップでLaravelとVagrantを使用しており、メモリ制限は-1に設定されていました。ベンダーを削除し、他のPHPバージョンを試しました。最後に、私はそれを実行することによってうまくいくように管理しました

vagrant halt
vagrant up

そして、作曲家のインストールはいつものように再び働きました。


0

DigitalOceanでホストされている最も安価なサーバー(512MB RAM)でも同様の問題があり、同じサーバーでJenkins CIも実行していました。Jenkinsインスタンスを停止した後、composer installコマンドは機能しました(まあ、ある程度、すでにインストールされていることに加えて、mcrypt拡張がないために失敗しました!)。

サーバー上で別のアプリを実行している場合は、それを停止してコマンドを再実行することをお勧めします。


0

jsバンドルを無効にして、メモリを増やしてください。それで解決するはずです。私はjsバンドルを無効にすることで私の問題を修正しました。

ありがとう


回答の詳細を共有してください-パッケージのダウンロードでエラーが発生したときに「jsバンドル」のヘルプを無効にする必要があるのはなぜですか(スクリプトが実行される前に発生します)
Nico Haase

-1

php.iniファイルを編集して、memory_limit値を増やします。

memory_limit = 1G

この問題を解決します。


-1
composer update

Loading composer repositories with package information
Updating dependencies (including require-dev)

> mmap()が失敗しました:[12]メモリを割り当てることができません

サーバーのメモリを更新して '4G'が必要4GBのRAMを変更[サーバーの種類を変更するか、RAMを追加してください]

2編集が必要なファイル


コマンドで

# cd /var/www/html
# nano .htaccess

そして編集"memory_limit 756M”する4G


PHP 7.0のPHP Ini

# cd ~
# php –-ini
# sudo nano /etc/php-7.0.ini

memory_limit = 128Mから4G

#AWS #AMAZONLINUX#MAGENTO2#PHP7.0


1
回答に説明を追加してください。何を変更しても、結局.htaccess影響はありません。composerこれは、ウェブサーバーを介して実行されないためです
ニコハーセ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.