Pembaruan PHP Composer kesalahan "tidak dapat mengalokasikan memori" (menggunakan Laravel 4)


168

Saya tidak bisa menyelesaikan yang ini.

Saya menggunakan paket dasar Linode 1G RAM. Mencoba menginstal paket melalui Komposer dan itu tidak membiarkan saya. Batas memori saya diatur ke "-1" di PHP.ini

Apakah ada hal lain yang bisa saya lakukan untuk menginstal ini?

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

Jawaban:


96

Agak lama tapi kalau-kalau ada orang baru mencari solusi, memperbarui versi PHP Anda dapat memperbaiki masalah ini.

Anda juga harus melakukan file composer.lock Anda dan melakukan instalasi komposer pada lingkungan produksi yang kurang intensif sumber daya.

Lebih detail di sini: https://github.com/composer/composer/issues/1898#issuecomment-23453850


12
CEMERLANG! Itu berhasil. Saya tidak memutakhirkan PHP saya, tetapi melakukan file composer.lock dan memperbarui menginstal semua hal dengan benar. Terima kasih.
ericbae

6
Terlambat ke pesta, tapi saya hanya mematikan Apache dan MySQL. Ada alasan saya menggunakan VPS RAM 512MB, tidak ingin menghabiskan uang.
Kumar

11
Memperbarui PHP bukanlah solusi. Saya memiliki 7.0.21, dan masih mendapatkan kesalahan ini.
cj5

Solusi @ Kumar bekerja untuk saya. Sangat mudah dan seperti kebanyakan hal, jelas di belakang :)
James Bridgewater

Terima kasih banyak. Menyelamatkan saya banyak waktu.
Jay Geeth

404

Sepertinya Anda kehabisan memori swap, coba ini

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

seperti yang disebutkan oleh @ BlackBurn027 pada komentar di bawah, solusi ini dijelaskan di sini


27
Anda Pak, jenius - ini bukan masalah php dan menghapus file tidak akan membantu. Saya harus mengikuti instruksi Anda (dengan sudo) di VPS saya. Ini adalah satu-satunya jawaban yang berguna di sini untuk pemilik VPS.
Croll

4
getcomposer.org/doc/articles/… sebagaimana disebutkan oleh sumber
BlackBurn027

1
Ini bekerja untuk saya, tetapi saya bingung apa perintah itu sebenarnya, bisakah seseorang menjelaskannya?
Joseph Astrahan

2
kadang-kadang 1024 tidak cukup ... Gunakan 2048 sebagai gantinya
psylosss

1
@ JaberAlNahian Anda dapat melakukan swap permanen, silakan cek di sini digitalocean.com/community/tutorials/…
Mohammed Omer

78

Sebagai panduan pemecahan masalah komposer di sini, ini dapat terjadi karena VPS kehabisan memori dan tidak memiliki ruang Swap yang diaktifkan.

free -m

Untuk mengaktifkan swap, Anda dapat menggunakan misalnya:

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

Atau jika di atas tidak berfungsi maka Anda dapat mencoba membuat file swap

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

terima kasih banyak tanpa memutakhirkan php5 ke php7 ini bekerja
Shadab K

Anda harus menjalankannya di CLI Linux
Umair Hamid

Itu memberi kesalahan lagi tetapi menjalankan pembaruan komposer setelah itu bekerja dengan baik.
Amir Hajiha

Dan Anda dapat memeriksa [dokumen resmi] [2] getcomposer.org/doc/articles/…
Thilina Dharmasena

38

Saya telah menghadapi masalah yang sama. Saya menggunakan Microinstance Gratis AWS yang memiliki memori lebih sedikit. Saya selalu mencoba salah satu opsi di bawah ini dan selalu berfungsi (Sebelum semua ini, periksa apakah Anda memiliki versi komposer terinstal)

sudo php -dmemory_limit=750M composer.phar update

atau hapus konten folder vendor dan coba pembaruan komposer.

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

Opsi kedua mencoba untuk memperbarui semua komponen, jika tidak ada pembaruan, itu mengambil paket dari cache yang lain mengambil dari dist

Catatan: Silakan ubah batas memori sesuai pilihan Anda.

atau

Buat partisi swap dan coba. Partisi swap adalah bagian dari hard drive yang digunakan linux sebagai memori virtual ketika kehabisan memori fisik. Ini mirip dengan file swap windows saja daripada menggunakan file yang sebenarnya, linux menggunakan partisi pada hard drive.

Semoga ini membantu


1
Saya menjatuhkan batas memori ke 500 juta dan komposer menginstal apa yang saya butuhkan.
devNoise

Anda juga dapat menggunakan file swap yang sebenarnya dan bukan partisi. lihat cyberciti.biz/faq/linux-add-a-swap-file-howto
rwilson04

2
Punya masalah yang sama pada akun Digital Ocean saya bahkan pada 250M saya juga harus menghentikan Apache dan MySQL terlebih dahulu sebelum saya bisa menjalankannya
tristanbailey

tristanbailey solusi Anda berhasil, terima kasih! Sebelum saya menghentikan mysql dan apache saya tidak bisa memperbarui, bahkan dengan menetapkan batas memori php.
Elias Kouskoumvekakis

Ketika saya menjalankan sudo php -dmemory_limit=750M composer.phar update saya mendapat kesalahan iniCould not open input file: composer.phar tolong bantu
Varun Naharia

15

Mudah, ketikkan perintah ini:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Harus bekerja untuk mesin dengan memori rendah


Bekerja untukku. Saya telah menulis jawaban komprehensif di sini - stackoverflow.com/questions/26850332/…
halkujabra

Ini tidak bekerja. Dan ini menghapus semua folder vendor saya. Itu salah!
Vladimir Kovalchuk

Apa masalah menghapus vendor? jalankan saja instal / perbarui lagi ...
letakkan

1
Menghapus vendor tidak sepenuhnya salah, meskipun itu merusak situs dan menyimpannya dalam kondisi rusak jika pemasangan masih tidak berfungsi. Namun, menghapus file kunci pada mesin produksi tidak disarankan. Anda harus melakukan file kunci Anda dan hanya menginstal, tidak memperbarui. Bahkan, dengan menghapus file kunci, Anda memaksa Composer untuk menginstal dari file json, yang merupakan asal proses intensif memori (menentukan versi mana yang akan diinstal).
Shauna

Tidak apa-apa untuk mengikuti ini jika Anda tidak berada dalam lingkungan produksi, karena itu akan merusak proyek sampai komposer selesai dengan instalasi
Bizarro

11

Berikut adalah langkah-langkah untuk memperbaiki masalah: (metode alokasi file SWAP cepat cepat digunakan)

Pengaturan Server SWAP (Ubuntu 16.04 SWAP untuk Memperbaiki Kesalahan Memori)

Periksa apakah Anda sudah menukar, memori dan ukuran disk:

    sudo swapon -s
    free -m
    df -h

Buat file swap: (ubah 1G ke 4G jika Anda ingin memori SWAP 4GB)

    sudo fallocate -l 1G /swapfile 

Periksa file swap:

    ls -lh /swapfile

Tetapkan File Tukar:

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

Periksa apakah swap OK, memori dan ukuran disk:

    sudo swapon -s
    free -m
    df -h

Lampirkan File Tukar di System Restart:

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

Sesuaikan Pengaturan Swap File:

    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

Prioritas File SWAP: (0-100% => 0: Jangan menukar, 100: Pakai SWAP dan bebaskan RAM)

        vm.swappiness=10

Hapus inode dari cache: (100: sistem menghapus informasi inode dari cache terlalu cepat)

        vm.vfs_cache_pressure = 50

Saya tidak tahu apa yang harus saya lakukan pada langkah terakhir sudo nano /etc/sysctl.conf, Jadi, saya lewati lalu restart Nginx dan kemudian lakukan composer install(sebelumnya saya sudah menghapus direktori vendor) dan itu berfungsi. Terima kasih!
arhakim

10

Saya memiliki masalah yang sama pada gelandangan. Saya memperbaikinya dengan mengalokasikan lebih banyak memori.

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

1
Menyelesaikan masalah ini untuk saya juga. Perhatikan bahwa dalam gelandangan 2.x vb.customize ...Anda tidak dapat melakukannya vb.memory = 1024.
acobster

10

Mencoba

itu pada dasarnya meningkatkan memori swap

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
Silakan tambahkan beberapa penjelasan untuk jawaban Anda sehingga orang lain dapat belajar darinya.
Nico Haase

Saya setuju bahwa ini harus memiliki lebih banyak penjelasan, tetapi itu bekerja untuk saya (pada dasarnya meningkatkan memori swap). Terima kasih!
user1015214

8

Coba itu:

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

1
Silakan tambahkan beberapa penjelasan untuk jawaban Anda sehingga orang lain dapat belajar darinya - terutama: apa yang telah Anda ubah dibandingkan dengan jawaban lain yang menggunakan pendekatan yang sama? Apakah ada kebutuhan untuk menggandakan jawaban mereka?
Nico Haase

7

Inilah solusi yang saya temukan yang bekerja untuk saya setiap saat:

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, memposting perintah tanpa menjelaskan apa yang mereka lakukan mungkin berbahaya! Meskipun saya dapat secara definitif mengatakan itu akan bekerja pada kebanyakan sistem. Pada dasarnya Anda membuat mengalokasikan ruang Swap sehingga HD dapat digunakan sebagai RAM. Berikut ini adalah panduan komprehensif tentang bagaimana melakukan itu dengan menjelaskan setiap perintah: digitalocean.com/community/tutorials/…
adelriosantiago

Terima kasih atas klarifikasi perintahnya, senang mengetahui apa yang sebenarnya dilakukan skrip sebelum Anda menjalankannya. Tetapi dengan cara yang sama tidak baik bagaimana Anda mempromosikan lautan digital dan posting tutorial / blog Anda.
Goran

Tutorialnya bagus, menunjukkan langkah demi langkah dengan penjelasan!
Tarik

Terima kasih! Instruksi Anda membantu saya menginstal Drupal Presto untuk server RAM 1GB. Saya telah mengubah 1024 hingga 2048.
Nikit

7

Saya mencoba dengan hanya menghapus folder vendor dan file composer.lock dan kemudian saya menjalankan perintah composer clear-cachedan kemudian composer install. Jadi itu berfungsi tanpa kesalahan.


6

Anda dapat menggunakan yang berikut untuk memeriksa memori (swap) gratis Anda

free -m

total used free shared buffers cached

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

Untuk mengaktifkan swap, Anda dapat menggunakan misalnya:

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

Saya menggunakan free -mdan memperhatikan bahwa saya tidak memiliki memori, bahkan dalam swap .. kemudian melakukannya sudo rebootdan berhasil
Eleazar Resendez

4

Ini tampaknya menjadi masalah berulang dengan instance server 1GB dan lebih kecil. Selain mencoba mematikan proses dan mengubah pengaturan swap, Anda dapat menginstal di mesin lokal dan mengunggah.


1
ya. Lucunya, jika saya menghapus seluruh proyek, melakukan git pull baru dan kemudian menginstal komposer, sepertinya berhasil. Aneh.
ericbae

Frustasi, saya mengerahkan beberapa proyek L4 ke instance Linode 1GB dan sekarang khawatir mengenai langit-langit memori.
Makita

Tautan lama tetapi mungkin bermanfaat: github.com/composer/composer/issues/1104
Makita

2
Jawaban yang diterima masih merupakan cara terbaik untuk melangkah. Anda harus melakukan composer.lock dan kemudian menjalankan instal alih-alih pembaruan pada server produksi.
Makita

3

Kadang-kadang dengan memperbarui sendiri komposer itu memecahkan masalah

php composer.phar self-update

Bersulang


Ini harus menjadi hal pertama yang mencoba untuk memperbaiki masalah ini. Saya punya masalah dengan 1.3.3, memperbarui sendiri ke 1.4.0 memperbaiki masalah. Kiat: Anda dapat memperbarui jawaban Anda untuk sampul juga mencakup kasus penggunaan composer self-update, jika seseorang yang tidak terbiasa dengan komposer membaca balasan ini.
Niklaus

dapatkan izin ditolak saat penggantian nama terjadi
Andrew

3

Coba ini:

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

Ini bekerja untuk saya di Centos 6


ini bekerja untuk saya di AWS Opsworks EC2 Instance Ubuntu 14.04! Terima kasih!
Paul Preibisch

3

Saya meningkatkan PHP memory_limit dari 128M menjadi 512M dan me-restart server. Itu memecahkan masalah.


3
reboot tidak diperlukan karena PHP tidak berjalan sebagai layanan.
HelpNeeder

1
Tidak, hanya Apache yang melakukannya dan karenanya harus dinyalakan kembali untuk mulai
berfungsi

1
itu diperlukan, karena apache memuat modul php
Aris

2

Saya masuk ke situasi ini sebagian besar kali jadi biasanya saya biasa mengikuti langkah pengaturan memori swap.

Tapi sekarang saya menemukan trik alternatif sederhana yang berhasil untuk saya.

Jalankan composer update --no-devSelaincomposer update


2

Saya memecahkan masalah yang sama di Vagrant. Saya meningkatkan nilai memory_limit dan menghapus cache komposer: sudo rm -R ~ / .composer dan akhirnya reload gelandangan.


1

memiliki masalah yang sama dengan pembaruan php composer.phar di hosting 512mb saya.

diselesaikan dengan menginstal php composer.phar


1

Buat swap dan jalankan perintah komposer lagi. Saya harap ini akan berhasil untuk Anda.

 $ 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

Dalam kasus saya, saya mencoba semua yang tercantum di atas. Saya menggunakan Laravel dan Vagrant dengan memori 4GB dan swap, dengan batas memori yang diatur ke -1. Saya menghapus vendor / dan mencoba versi PHP lainnya. Akhirnya, saya berhasil bekerja dengan berlari

vagrant halt
vagrant up

Dan kemudian pemasangan komposer bekerja kembali seperti biasa.


0

Saya memiliki masalah serupa pada server termurah (RAM 512MB) yang di-host dengan DigitalOcean , dan saya juga menjalankan Jenkins CI di server yang sama. Setelah saya menghentikan instance Jenkins, perintah install komposer bekerja (ya, to the point, gagal dengan ekstensi mcrypt hilang selain sudah diinstal!).

Mungkin jika Anda memiliki aplikasi lain yang berjalan di server, mungkin ada baiknya mencoba menghentikannya dan menjalankan kembali perintah.


0

Harap nonaktifkan bundling js dan tambah memori. Itu harus memperbaikinya. Saya memperbaiki milik saya dengan menonaktifkan bundling js.

Terima kasih


Silakan bagikan lebih detail tentang jawaban Anda - mengapa harus menonaktifkan "js bundling" membantu ketika terjadi kesalahan saat mengunduh paket (yang terjadi jauh sebelum ada skrip dijalankan)
Nico Haase

-1

edit file php.ini dan tambah nilai memory_limit.

memory_limit = 1G

akan menyelesaikan masalah ini.


-1
composer update

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

> mmap () gagal: [12] Tidak dapat mengalokasikan memori

Perbarui memori di Server dan minta '4G' Ubah Ram 4GB [coba ubah jenis server atau tambahkan ram lainnya]

2 File Kita perlu mengedit


atas perintah

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

dan edit "memory_limit 756M”ke4G


Php ini di php 7.0

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

memory_limit = 128M ke 4G

#AWS #AMAZONLINUX # MAGENTO2 # PHP7.0


1
Silakan tambahkan beberapa penjelasan untuk jawaban Anda. Mengubah apa pun .htaccesstidak akan memengaruhi composer, karena ini tidak dijalankan melalui server web
Nico Haase
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.