Composer güncelleme bellek sınırı


96

Barındırıcımda besteci güncellemesini çalıştırmam gerekiyor, bu yüzden ssh ile giriş yapıp şu komutu çalıştırmayı deniyorum:

composer update

Laravel ve besteci kurulumumun olduğu yerde / www klasörü içinde

ama hata alıyorum:

görüntü açıklamasını buraya girin

barındırma sağlayıcımla iletişimde bana şu komutu çalıştırmamı söylediler:

php -d memory_limit=512M composer update

Bu komutu çalıştırıyorum ama şunu alıyorum: "Dosya açılamadı: composer"

Ne yapalım? Buradaki çözüm nedir?


2
@Sven'in dediği gibi, üretimde composer installyeterli. Sizin durumunuzda, paylaşılan bir barındırma kullanırken, composer updateçalışmayacağınızı düşünüyorum , bu yüzden tek yol, Digital Ocean, Linode gibi bir VPS barındırma satın almak.
Lucas Silva

Yanıtlar:


143

Çalıştırdığınızda composer update, işletim sistemi yapılandırılmış yollara bakacak ve bu ada sahip yürütülebilir bir dosya bulmaya çalışacaktır.

Dizge çalışırken php composer update, composerherhangi bir yolda aranmayan PHP'nin bir parametresi olarak kabul edilir. Çalıştırmak için tam yolu sağlamalısınız.

Çalıştırmak which composersize, işletim sisteminin besteciyi nerede çalıştırılabilir bulduğunu söyleyecek ve ardından PHP komutundaki tam yolu kullanacaksınız:

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

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

512MB’nin çok az olabileceğini unutmayın. Benim algım, kullandığınız bağımlılıkların sayısına ve teorik olarak izin verdiğiniz sürümlerin çeşitliliğine bağlı olarak mutlu bir şekilde 1GB veya daha fazlasını alacağıdır ~2.3, yani Symfony'ye izin verirseniz, Composer'ı kullanmaya kıyasla çok daha olası sürümlerle ilgilenirsiniz. ~2.7.

Ayrıca, Composer'ı üretim makinesinde çalıştırmanın en iyi fikir olmadığını unutmayın. Github'a erişiminizin olması, belki erişim kimlik bilgilerini sağlamanız, VCS araçlarının kurulu olması gerekir ve güncellemeniz sırasında uzak barındırma sunucularından herhangi biri çevrimdışıysa sitenizi kolayca bozarsınız. Composer'ı tüm hazırlığı yapan ve ardından tüm dosyaları üretim sunucusuna taşıyan bir dağıtım sisteminde kullanmak daha iyi bir fikirdir.

Güncelleme

Şimdi 2020 yılı ve Composer'ın hafızasını yönetme şekli biraz değişti. En önemli şey, Composer'ın çok düşük bir limit setiyle karşılaşırsa kendi başına bellek limitini artıracağıdır. Ancak bu, çok az belleğe sahip makinelerde belleğin bitmesi sorununu hemen tetikler. Composer'ın ortam değişkenini gibi ayarlayarak daha az bellek kullanmasını sağlayabilirsiniz COMPOSER_MEMORY_LIMIT=512M, ancak Composer'ın düzgün çalışması için daha fazla belleğe ihtiyaç duyarsa bu sorun yaratacaktır.

Esas noktam hala geçerli: Composer'ı çok az belleğe sahip makinelerde çalıştırmayın. Her şeyi güncelleyebilmek için potansiyel olarak 1,5 GB boş belleğe ihtiyacınız var.


Ben sadece wite: php -r "readfile (' getcomposer.org/installer' );" | php ve ondan sonra her şey yolunda gidiyor ... ayrıca YARDIM İÇİN TEŞEKKÜRLER
Andrew

41
php -d memory_limit=-1 $(which composer) updatebesteci yolunu belirtmeye gerek olmadığı için daha kullanışlıdır.
Rax

1
Bu harika. Tek bir komut için hafızayı güçlendirebileceğini bilmiyordum. Bunun doğru yaptığı şey bu mu?
plushyObject

pencerelerde nasıl?
Ray

1
@Rax bir şey daha, bu komutu mingw'de pencerelerde çalıştırıyorsanız, yolun çevrilmesi gereken bir hata alırsınız, bu yüzden bu komutu kullanınphp -d memory_limit=-1 $(which composer).phar update
Faizan

155

İstediği kadar bellek kullanacak şekilde ayarlayın:

COMPOSER_MEMORY_LIMIT=-1 composer update

Küresel olarak bu değeri veya herhangi bir değeri nasıl belirleyebiliriz? bunu her seferinde CLI aracılığıyla yapmak zorunda kalmak yerine?
snh_nl

@snh_nl php bellek limitini ayarlamanız gerekecek. Örnek: sectionthree.com/blog/how-fix-composer-memory-issue
jasonflaherty

2
Bunu global olarak / etc / profilinizde (veya hangi kabuğu kullanırsanız kullanın) tanımlayın COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT. Veya onu bir kabuk takma adı olarak tanımlayın? alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer', memcomposeryerine kullanıncomposer
diamondsea

Hala diyorFatal 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
Ozan Kurt

15

Besteci ile sorunlar yaşıyorum çünkü mevcut tüm belleği tüketiyor ve sonra işlem sonlanıyor (aslında, çıktı mesajı "Killed")

Bu nedenle, bestecinin bellek kullanımını sınırlamak için bir çözüm arıyordum.

Denedim (@Sven cevaplarından)

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

Ama işe yaramadı çünkü

"Composer dahili olarak memory_limit'i 1.5G'ye yükseltir."

-> Bu resmi web sitesinin bestecisinden.

Sonra çalışan bir komut buldum:

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update

Yine de benim durumumda 512mb yeterli değil!

Kaynak: https://www.agileana.com/blog/composer-memory-limit-trfunction/


1
Besteciyi şu şekilde kullanmak zorunda kaldım: COMPOSER_MEMORY_LIMIT = 1024M besteci 'modül' gerektiriyor
jasonflaherty

1
Benzer, kullandımCOMPOSER_MEMORY_LIMIT=-1 composer require <package name>
realtebo

13

Ben birleştirmek zorunda COMPOSER_MEMORY_LIMITve memory_limitkomut satırında:

Windows'ta:

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

Linux'ta:

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

Bu benim için Mac OS X El Capitan'da çalışan tek program.
ymd_

12

Benim için en iyi çözüm

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name>

@realtebo tarafından bahsedildi


8

Yeterli bellek varsa, düzenleyici dahili olarak tüketir ve sorunsuz çalışır. Besteciye bunu yapmasını özellikle söylemenize gerek yok.

Takas hafızanızı artırmayı denediniz mi, çünkü benim için çalıştı. Takas belleğini 4096Mb'ye (4GB) yükselttim ve şimdi hepsi bana harika görünüyor.

önce sudo freekullanılabilir belleği görmek ve belleği değiştirmek için " " öğesini kullanın. ve takası şu şekilde yapılandırın:

Debian için:

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

kalıcı hale getirmek için bunu / etc / fstab dosyasına ekleyin, /swapfile swap swap defaults 0 0

CentOS için:

[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

takas belleğinizi, fiziksel birim boyutunuza bağlı olarak bs = 1024k veya 2048k veya 8096k değiştirerek artırabilirsiniz. farkı görmek için 'swapon' ve swapoff komutlarını kullanın.

'takas'ı kontrol edin (60 iyi yapmalı)

cat /proc/sys/vm/swappiness

5

memory_limitPhp.ini dosyanızın değerini değiştirebilirsiniz.

Php.ini dosyanızdaki sınırı artırmayı deneyin

Sınırsız için -1 kullanın veya 2G gibi açık bir değer tanımlayın

memory_limit = -1

Not: Composer, memory_limit'i dahili olarak 1.5G'ye yükseltir.

Belgeleri okuyun getcomposer.org


3

MAC OS High Siera'da aşağıdakileri çalıştırdım:

MacBook-Pro:asiu jack$ php --ini

İade:

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

Yukarıdaki tüm yanıtlar, güncellenen yüklü yapılandırmayı ayarlamaktır, ancak ayrıştırılan ek .ini dosyalarının ayrı bir dosya olarak php-memory-limits.ini'ye sahip olduğuna dikkat edin. Bu dosyanın hafıza limitini de güncellemelisiniz. aynı şekilde metin düzenleyicide açın ve 2G gibi bir şeye değiştirin. Bellek limiti başarısızlığının çıktısı size ne kadar bellek çalışması gerektiğini söylemelidir, sadece bundan daha yükseğe veya sınırsız için -1'e ayarlayın.


2

Bu hata, özellikle büyük kitaplıkları veya çok sayıda bağımlılığı olan kitaplıkları güncellerken ortaya çıkabilir. Besteci hafızaya oldukça aç olabilir.

Bestecinizin kendisinin en son sürüme güncellendiğinden emin olun:

php composer.phar --self-update

Besteci bellek sınırı ortam değişkenini ekleyerek composer için bellek sınırını geçici olarak artırabilirsiniz:

COMPOSER_MEMORY_LIMIT=128MB php composer.phar update

Megabayt için "128M" veya gigabayt için "2G" biçimini kullanın. Bellek sınırını tamamen yok saymak için “-1” değerini kullanabilirsiniz.

Başka bir yol da PHP bellek sınırını artırmak olabilir:

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

2

Bunu Windows 10'da yaptım ve benimle çalıştım:

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

İstediğiniz xx Değerini değiştirebilirsiniz

 memory_limit=XX

1

AWs sunucunuz ne kadar büyük? Yalnızca 1 gb ram varsa, php.ini içinde bellek sınırını 2 gb olarak ayarlamak yardımcı olmaz.

Daha fazla RAM elde etmek için sunucu tarafını da artıramıyorsanız / artırmak istemiyorsanız, SWAP'ı da etkinleştirebilirsiniz.

Takasın nasıl etkinleştirileceğini öğrenmek için buraya bakın . 4gb'yi etkinleştiriyor, ancak genellikle kendim 1GB yapıyorum.

Kaynak: Laracast sitesinden alındı


0

Benim durumumda cevapların hiçbiri yardımcı olmadı. Sonunda, PHP'nin 64 bit sürümüne (M $ Windows) geçmenin sorunu hemen çözdüğü ortaya çıktı. Herhangi bir ayarı değiştirmedim - sadece işe yaradı.


0

Laravel 6'yı Homestead ile çalıştırıyorum ve aynı zamanda bu problemle karşılaştım. Burada diğer cevaplarda önerildiği gibi, COMPOSER_MEMORY_LIMIT=-1tek bir komutun önüne ekleyebilir ve komutu normal şekilde çalıştırabilirsiniz. PHP yapılandırmanızı her zaman sınırsız belleğe izin verecek şekilde güncellemek istiyorsanız, aşağıdaki adımları izleyin.

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 dosyanıza ekleyin . Vim'i kullanmakta veya php.ini dosyasında düzenlemeler yapmakta sorun yaşıyorsanız , php.ini dosyasını Vim ile nasıl düzenleyeceğiniz hakkındaki bu yanıtı kontrol edin . Dosya şunun gibi görünmelidir:

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

Bunun makinenizde sonsuz miktarda bellek tüketebileceğini unutmayın. Muhtemelen üretim lol için iyi bir fikir değil. Laravel Valet ile bu makaleyi takip etmek ve bellek değerini buradan güncellemek zorundaydı :

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

Ardından sunucuyu Vale ile yeniden başlatın:

valet restart

Bu yanıt , değişikliklerin geçerli olması için Mac'te Laravel Valet ile yapılandırmayı değiştirmek için de yararlı oldu.


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

3
Lütfen cevabınıza başkalarının da öğrenebileceği bir açıklama ekleyin
Nico Haase



0

Laravel için

Adım 1. Terminalinizi açın

Adım 2. cd laravel dizininize girin

Adım 3. Komutu yazın which composer Laravel dizininize ve bestecinin bulunduğu dizini not edin.

adım 4. komutu çalıştırın php -d memory_limit=-1 /opt/cpanel/bin/composer update (sizin için çalışıyorsa kodu da çalıştırabilirsiniz)

(değişiklik /opt/cpanel/bin/composer 3. adımda döndürülen dizin yolunu )

Sorun çözüldü


0

Windows 10'da (Git bash), bunu kullanmak zorunda kaldım

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

-1

Benim durumumda, bu bellek limiti artışıyla birlikte daha yüksek izinlere ihtiyacı vardı.

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

Composer'ı birlikte çalıştırmak sudo, izinlerinizi karıştıracağından iyi bir fikir değildir. Bu composer update, bir sunucuda çalışıyormuşsunuz gibi görünüyor - bu aynı zamanda kötü bir uygulamadır çünkü hesaplanan bağımlılıkları sürüm kontrolü altına almak çok daha farklı olacaktır
Nico Haase

@NicoHaase ile aynı fikirde, bunu kullanırken çok dikkatli olmalısın! Teşekkürler.
Naser Nikzad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.