PHP Composer güncellemesi “bellek ayıramıyor” hatası (Laravel 4 kullanılarak)


169

Bunu çözemiyorum.

Linode 1G RAM temel planındayım. Composer aracılığıyla bir paket kurmaya çalışıyorum ve bana izin vermiyor. PHP.ini'de bellek sınırım "-1" olarak ayarlandı

Bunu kurmak için yapabileceğim başka bir şey var mı?

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

Yanıtlar:


97

Biraz eski ama yeni birinin bir çözüm araması durumunda, PHP sürümünüzü güncellemek sorunu çözebilir.

Ayrıca composer.lock dosyanızı taahhüt ediyor ve daha az kaynak gerektiren bir üretim ortamında bir besteci yüklemesi yapmalısınız.

Daha fazla ayrıntı burada: https://github.com/composer/composer/issues/1898#issuecomment-23453850


12
PARLAK! İşe yaradı. PHP'mi yükseltmedim, ancak composer.lock dosyasını yürütme ve güncelleme her şeyi düzgün bir şekilde yükledi. Teşekkür ederim.
ericbae

6
Partiye geç kaldım, ama Apache ve MySQL'i kapattım. 512MB RAM VPS kullanmamın bir nedeni var, para harcamak istemiyorum.
Kumar

11
PHP'yi güncellemek bir çözüm değildir. 7.0.21 var ve hala bu hatayı alıyorum.
cj5

@ Kumar'ın çözümü benim için çalıştı. Süper kolay ve çoğu şey gibi, arkada açık :)
James Bridgewater

Çok teşekkürler. Bana biraz zaman kazandırdı.
Jay Geeth

404

Takas hafızanız bitmiş gibi görünüyor, bunu deneyin

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

@ BlackBurn027 tarafından aşağıdaki yorumlarda belirtildiği gibi, bu çözüm burada açıklanmıştır


27
Siz efendim, bir dahi - bu bir php sorunu değil ve dosyaları kaldırmak yardımcı olmaz. VPS'imde (sudo ile) talimatları takip etmeliyim. Bu VPS sahipleri için tek yararlı cevaptır.
Croll

4
getcomposer.org/doc/articles/... olarak kaynak tarafından belirtildiği
BlackBurn027

1
Bu benim için çalıştı ama bu komutların gerçekte ne yaptığını kafam karıştı, birisi bunları açıklayabilir mi?
Joseph Astrahan

2
bazen 1024 yeterli değildir ... Bunun yerine 2048 kullanın
psylosss

1
@JaberAlNahian kalıcı bir takas yapabilirsiniz lütfen burayı kontrol edin digitalocean.com/community/tutorials/…
Muhammed Ömer

80

Besteci giderme rehberi olarak burada VPS bellek biterse ve etkinleştirilmiş hiçbir Takas alanı vardır, çünkü bu oluyor olabilir.

free -m

Değiştirmeyi etkinleştirmek için aşağıdakileri kullanabilirsiniz:

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

Ya da yukarıda işe yaramadıysa, bir takas dosyası oluşturmayı deneyebilirsiniz

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

php5 php7 yükseltme olmadan çok teşekkürler bu çalıştı
Shadab K

Linux CLI üzerinde çalıştırmalısınız
Umair Hamid

Yine hata verdi ama iyi çalıştı sonra besteci güncelleme çalışıyor.
Amir Hajiha


38

Aynı sorunla karşılaştım. Daha az hafızası olan bir AWS Free Microinstance kullanıyorum. Her zaman aşağıdaki seçeneklerden birini denerim ve her zaman çalışır (Tüm bunlardan önce lütfen bestecinin en son sürümünün yüklü olup olmadığını kontrol edin)

sudo php -dmemory_limit=750M composer.phar update

veya satıcı klasörünün içeriğini kaldırın ve besteci güncellemesini deneyin.

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

İkinci seçenek tüm bileşenleri güncellemeye çalışır, güncelleme yoksa, paketi önbellekten alır, başka bir deyişle dağıtımdan alır.

Not: Lütfen bellek sınırını seçiminize göre değiştirin.

veya

Bir takas bölümü oluşturun ve deneyin. Takas bölümü, sabit sürücünün fiziksel bellek bittiğinde linux'un sanal bellek olarak kullandığı bölümüdür. Windows takas dosyasına sadece gerçek bir dosya kullanmak yerine benzer, linux bunun yerine sabit sürücüde bir bölüm kullanır.

Bu yardımcı olur umarım


1
Bellek sınırını 500M'ye düşürdüm ve besteci ihtiyacım olanı yükledi.
devNoise

bölüm yerine gerçek bir takas dosyası da kullanabilirsiniz. bkz. cyberciti.biz/faq/linux-add-a-swap-file-howto
rwilson04

2

tristanbailey çözümünüz çalıştı, teşekkürler! Ben mysql ve apache durdurmadan önce, hatta php bellek sınırını ayarlayarak güncelleme olamazdı.
Elias Kouskoumvekakis

Ben çalıştırdığınızda sudo php -dmemory_limit=750M composer.phar update bu hata var Could not open input file: composer.pharlütfen yardım
Varun Naharia

15

Kolay, şu komutları yazın:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Düşük bellekli makineler için çalışmalı


Benim için çalıştı. Buraya kapsamlı bir cevap yazdım - stackoverflow.com/questions/26850332/…
halkujabra

Çalışmıyor. Bu da tüm satıcı klasörümü sildi. Yanlış!
Vladimir Kovalchuk

Satıcıyı silmede sorun nedir? sadece yükle / güncelle'yi tekrar çalıştır ...
işaret

1
Satıcının silinmesi tamamen yanlış değildir, ancak siteyi bozar ve yükleme hala çalışmazsa bozuk durumda tutar. Ancak kilit makinelerinin üretim makinelerinde silinmesi tavsiye edilmez. Kilit dosyanızı taahhüt ediyor olmalı ve sadece kurmalı, güncelleme yapmamalısınız. Aslında, kilit dosyasını silerek, Composer'ı bellek yoğun işlemlerin geldiği json dosyasından yüklemeye zorlarsınız (ne yükleneceğinin hangi sürümünü belirler).
Shauna

Bir üretim ortamında değilseniz bunu takip etmek sorun değil, çünkü besteci kurulumla birlikte bitene kadar projeyi kıracak
Bizarro

11

Sorunu çözmek için adımlar şunlardır: (Anında hızlı SWAP dosya ayırma yöntemi kullanıldı)

Sunucu SWAP Kurulumu (Ubuntu 16.04 SWAP, Bellek Yetersiz Hatalarını Düzeltmek için)

Önceden takasınız olup olmadığını, bellek ve disk boyutunu kontrol edin:

    sudo swapon -s
    free -m
    df -h

Takas dosyası yap: (4 GB SWAP bellek istiyorsanız 1G'yi 4G olarak değiştirin)

    sudo fallocate -l 1G /swapfile 

Takas dosyasını kontrol edin:

    ls -lh /swapfile

Takas Dosyası Ata:

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

Takas olup olmadığını, bellek ve disk boyutunu kontrol edin:

    sudo swapon -s
    free -m
    df -h

Sistem Yeniden Başlatıldığında Takas Dosyasını Ekle:

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

Takas Dosyası Ayarlarını Yapın:

    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 Dosya Önceliği: (% 0-100 => 0: Takas etmeyin, 100: SWAP'ı takın ve RAM'i boşaltın)

        vm.swappiness=10

İnode'u önbellekten kaldır: (100: sistem inode bilgilerini önbellekten çok hızlı bir şekilde kaldırır)

        vm.vfs_cache_pressure = 50

Son adımda ne yapmam gerektiğini bilmiyorum sudo nano /etc/sysctl.conf, Yani, atla ve sonra Nginx'i yeniden başlat ve sonra composer install(daha önce satıcı dizinini kaldırdım) ve çalışıyor. Teşekkürler!
arhakim

10

Vagrant için de aynı sorunu yaşadım. Ben allcate daha fazla bellek tarafından düzeltildi.

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

1
Bu sorunu benim için de çözdüm. Vagrant 2.x yerine vb.customize ...bunu yapabileceğinizi unutmayın vb.memory = 1024.
acobster

10

Deneyin

temelde takas hafızasını yükseltiyor

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
Lütfen cevabınıza başkalarının ondan öğrenebilecekleri bir açıklama ekleyin.
Nico Haase

Bunun daha fazla açıklaması olması gerektiğine katılıyorum, ama benim için çalıştı (temel olarak takas hafızasını yükseltiyor). Teşekkürler!
user1015214

8

Bunu dene:

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

1
Lütfen cevabınıza başkalarının ondan öğrenebilecekleri bir açıklama ekleyin - özellikle: aynı yaklaşımı kullanan diğer cevaplara kıyasla neyi değiştirdiniz? Yanıtlarını çoğaltmaya gerek var mı?
Nico Haase

7

İşte benim için her zaman işe yaradığını bulduğum geçici çözüm:

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
Wowwow, ne yaptıklarını açıklamadan komutları yayınlamak muhtemelen tehlikelidir! Her ne kadar çoğu sistemde işe yarayacağını kesin olarak söyleyebilirim. Temel olarak HD'nin RAM olarak kullanılabilmesi için Değiştirme alanı ayırıyorsunuz. Her komutu açıklayan bunun nasıl yapılacağı hakkında kapsamlı bir kılavuz: digitalocean.com/community/tutorials/…
adelriosantiago

Komutların açıklığa kavuşturulması için teşekkür ederiz, komut dosyasını çalıştırmadan önce gerçekten ne yaptığını bilmek güzel. Ancak aynı şekilde dijital okyanusu ve öğreticinizi / blog yayınınızı nasıl tanıttığınız da hoş değil.
Goran

Öğretici, açıklamalar ile adım adım gösteren harika!
Tarik

Teşekkür ederim! Talimatlar 1GB RAM sunucusu için Drupal Presto'yu kurmama yardım ediyor. 1024'ten 2048'e
değiştim.

7

Ben sadece satıcı klasörü ve composer.lock dosyasını silerek denedim ve sonra komutu çalıştırın composer clear-cacheve sonra composer install. Yani hatasız çalışıyor.


6

boş (takas) belleğinizi kontrol etmek için aşağıdakileri kullanabilirsiniz

free -m

total used free shared buffers cached

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

Değiştirmeyi etkinleştirmek için aşağıdakileri kullanabilirsiniz:

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

Kullandım free -mve hatta sudo reboot
takasta

4

Bu, 1GB ve daha küçük sunucu örneklerinde tekrarlanan bir sorun gibi görünüyor. İşlemleri kapatmaya ve takas ayarlarını değiştirmeye çalışmanın yanı sıra, yerel bir makineye yükleyebilir ve karşıya yükleyebilirsiniz.


1
Evet. Komik bir şey, tüm projeyi silersem, taze bir git çekmesi yapar ve daha sonra besteci yüklemesi yaparsam işe yarıyor gibi görünüyor. Garip.
ericbae

Sinir bozucu, 1GB Linode örneklerine birkaç L4 projesi dağıtıyorum ve şimdi bellek tavanına vurmaktan endişeliyim.
Makita

Eski bir bağlantı olabilir ancak bazı yararları
Makita

2
Kabul edilen cevap hala en iyi yol. Composer.lock komutunu vermeli ve üretim sunucusunda güncelleme yerine bir kurulum çalıştırmalısınız.
Makita

3

Bazen kendi kendini güncelleyen besteci ile sorunu çözer

php composer.phar self-update

Şerefe


Sorunu gidermeye çalışan ilk şey bu olmalı. 1.3.3 ile ilgili sorun yaşadım, 1.4.0'a kendi kendine güncelleme sorunu düzeltti. İpucu: composer self-updateBestecinizi çok tanımayan biri bu yanıtı okumak istiyorsa yanıtınızı da kapsayacak şekilde güncelleyebilirsiniz .
Niklaus


3

Bunu dene:

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

Bu iş benim için Centos 6'da


Bu benim için AWS Opsworks EC2 Instance Ubuntu 14.04 üzerinde çalıştı! Teşekkürler!
Paul Preibisch

3

Ben PHP artan memory_limitvarsayılan gelen 128M için 512M ve sunucuyu yeniden başlatın. Bu sorunu çözdü.


3
PHP bir hizmet olarak çalışmadığı için yeniden başlatma gerekmez.
HelpNeeder

1
Hayır ama Apaçi ... yapar ve böylece etkili olması için yeniden başlatılması gerektiği
Dediqated

1
apache php modüllerini yüklerken gerekli
Aris

2

Ben çoğu zaman bu duruma girmek normalde takas belleği ayarlama adımını takip etmek için kullanılır.

Ama şimdi benim için çalışan basit bir alternatif numara buldum.

Run composer update --no-devdışındacomposer update


2

Vagrant'ta da aynı sorunu çözdüm. Ben önemini daha da arttırmaktadır memory_limit : ve silme besteci cache sudo rm -R ~ / .composer ve son olarak serseri yeniden yükleme.


1

benim 512mb hosting php composer.phar güncelleme ile aynı sorunu var.

php composer.phar install ile çözüldü


1

Takas yapın ve besteci komutunu tekrar çalıştırın. Umarım senin için çalışır.

 $ 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

Benim durumumda yukarıda listelenen her şeyi denedim. Laravel ve Vagrant'ı 4GB bellek ve takas ile kullanıyordum, bellek sınırı -1 olarak ayarlanmıştı. Satıcıyı sildim / ve diğer PHP sürümlerini denedim. Sonunda çalıştırarak başardım

vagrant halt
vagrant up

Ve sonra besteci kurulumu her zamanki gibi tekrar çalıştı.


0

DigitalOcean ile barındırılan en ucuz sunucuda (512MB RAM) benzer bir sorun yaşadım yaşadım ve aynı sunucuda Jenkins CI da çalıştırıyordum. Jenkins örneğini durdurduktan sonra besteci install komutu çalıştı (iyi, bir noktaya kadar, zaten yüklü olmanın yanı sıra mcrypt uzantısı eksik!).

Belki sunucuda çalışan başka bir uygulamanız varsa, belki de durdurmaya ve komutu yeniden çalıştırmaya değer.


0

Lütfen js paketlemeyi devre dışı bırakın ve belleği artırın. Bunu düzeltmeli. Ben js demetleme devre dışı bırakarak benim sabit.

Teşekkürler


Lütfen yanıtınızla ilgili daha fazla ayrıntı paylaşın - neden bir paket indirilirken bir hata oluştuğunda "js bundling" yardımını devre dışı bırakmalısınız (herhangi bir komut dosyası çalıştırılmadan önce gerçekleşir)
Nico Haase

-1

php.ini dosyasını düzenleyin ve memory_limit değerini artırın.

memory_limit = 1G

bu sorunu çözecektir.


-1
composer update

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

> mmap () başarısız oldu: [12] Bellek ayrılamıyor

Sunucudaki belleği güncelleyin ve '4G' gerektirir 4GB RAM'i değiştirin [sunucu türünü değiştirmeyi deneyin veya daha fazla ram ekleyin]

Düzenlememiz Gereken 2 Dosya


Emrinle

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

ve düzenleme "memory_limit 756M”için4G


Php 7.0 üzerinde php ini

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

memory_limit = 128M ila 4G

#AWS #AMAZONLINUX # MAGENTO2 # PHP7.0


1
Lütfen cevabınıza biraz açıklama ekleyin. Sonuçta hiçbir şey .htaccessdeğişmez composer, çünkü bu bir web sunucusu üzerinden yapılmaz
Nico Haase
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.