Komposer terbunuh saat memperbarui


118

Saya mendapat masalah, saya mencoba menginstal paket baru ke proyek Laravel 4 saya. Tetapi ketika saya berlari php composer.phar updatesaya mendapatkan ini:

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

Saya telah mencari masalah di Internet dan melihat bahwa memori adalah masalahnya, saya rasa saya tidak memiliki cukup RAM yang tersedia, saya telah memeriksa ini, saya memiliki sekitar 411mb gratis. Apakah komposer benar-benar membutuhkan lebih banyak RAM?

Jawaban:


295

Pesan "Killed" biasanya berarti proses Anda menghabiskan terlalu banyak memori, jadi Anda mungkin perlu menambahkan lebih banyak memori ke sistem Anda jika memungkinkan. Pada saat menulis jawaban ini, saya harus meningkatkan memori mesin virtual saya menjadi setidaknya 768MB agar composer updatedapat berfungsi dalam beberapa situasi.

Namun, jika Anda melakukan ini di server langsung, Anda tidak boleh menggunakan composer updatesama sekali. Yang harus Anda lakukan adalah:

  1. Jalankan composer updatedi lingkungan lokal (seperti langsung di laptop / desktop fisik Anda, atau kontainer / VM yang berjalan di laptop / desktop Anda) di mana batasan memori seharusnya tidak terlalu parah.
  2. Unggah atau git pushfile composer.lock.
  3. Jalankan composer installdi server langsung.

composer installkemudian akan membaca dari file .lock, mengambil versi yang persis sama setiap saat daripada mencari versi terbaru dari setiap paket. Ini membuat aplikasi Anda cenderung tidak rusak, dan komposer menggunakan lebih sedikit memori.

Baca lebih lanjut di sini: https://getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

Alternatifnya, Anda dapat mengunggah seluruh vendordirektori ke server, mengabaikan kebutuhan untuk menjalankan composer installsama sekali, tetapi kemudian Anda harus menjalankannya composer dump-autoload --optimize.


5
Ketika saya mengunggah composer.lock dan menjalankan komposer, instal bekerja. Terima kasih!
Ehsan

Ini tidak berfungsi untuk saya, komposer adalah penginstal oleh apt, jadi saya menghapusnya dan menginstal secara manual, kemudian semuanya berfungsi dengan baik.
rafaelphp

2
Saya mengalami masalah ini di komputer lokal.
afilina

Untuk pengembangan lokal, gunakan @ Balmipor's Answer, atau server lain dengan sedikit ram.
Shawn Pivonka

73

Jika seperti saya, Anda menggunakan beberapa VM mikro yang kekurangan memori, membuat file swap melakukan trik:

#Check free memory before
free -m

mkdir -p /var/_swap_
cd /var/_swap_
#Here, 1M * 2000 ~= 2GB of swap memory.  Feel free to add MORE
dd if=/dev/zero of=swapfile bs=1M count=2000
mkswap swapfile
swapon swapfile
chmod 600 swapfile
#Automatically mount this swap partition at startup
echo "/var/_swap_/swapfile none swap sw 0 0" >> /etc/fstab

#Check free memory after
free -m

Seperti yang ditunjukkan beberapa komentar, jangan lupa menambahkan sudo jika Anda tidak berfungsi sebagai root.

btw, jangan ragu untuk memilih lokasi / nama file / ukuran lain untuk file tersebut.
/varmungkin bukan tempat terbaik, tetapi saya tidak tahu tempat mana, dan jarang peduli karena server kecil kebanyakan digunakan untuk tujuan pengujian.


4
Jangan lupa tentang sudo- Saya harus menggunakan hak akses root untuk menjalankan perintah ini.
MacDada

kembali swapon: swapfile: swapon failed: Operation not permitted, Mengapa?
Muhammad Dyas Yaskur

@Muhammad Dyas Yaskur Jika Anda tidak memiliki masalah izin (pastikan untuk bekerja sebagai root atau menggunakan sudo), apakah Anda memiliki hal lain yang khusus dalam konfigurasi Anda (OS, jenis drive, dll.)?
Balmipour

1
Yang terbaik adalah menjalankan perintah dalam model root. `` sudo su```
dheeraj

1
@Balmipour Saya menggunakan kotak Laravel Homestead * Homestead v10.12.0, v11.0.2 * Settler v9.5.1 (Ubuntu 18.04) * Settler v10.0.0 (Ubuntu 20.04) Saya akan berterima kasih jika saya telah melakukan "sudo su" maka itu akan terjadi bekerja tanpa sudo.
Shawn Pivonka

19

Sayangnya, komposer membutuhkan banyak RAM & daya pemrosesan. Berikut adalah beberapa hal yang saya lakukan, yang digabungkan, membuat prosesnya dapat ditanggung. Ini ada di cloud playpen env saya.

  1. Anda mungkin hanya kehabisan RAM. Aktifkan swap: https://www.digitalocean.com/community/search?q=add+swap (catatan: Saya pikir praktik terbaik adalah menambahkan partisi terpisah. Panduan Digitalocean sesuai untuk lingkungan mereka)
  2. service mysql stop (matikan layanan DB / mem-hog Anda untuk membebaskan sebagian RAM - jangan lupa untuk memulainya lagi!)
  3. gunakan sesi terminal sekunder yang berjalan topuntuk melihat konsumsi memori / swap sampai proses selesai.
  4. composer.phar update --prefer-dist -vvv(output verbose [masih hang di beberapa titik saat bekerja] dan menggunakan file zip distro). Mungkin coba --dry-runjuga?
  5. Komposer tampaknya tahu untuk berjalan lebih lambat di versi PHP yang lebih lama (misalnya 5.3x). Masih lambat di 5.5.9 untuk saya ...

Saya diganti topdengan htop, lebih nyaman.
DevonDahon

Juga pertimbangkan untuk membuat file swap
Hari Harker

8

Perbaikan DigitalOcean yang tidak memerlukan memori tambahan - mengaktifkan swap, berikut adalah contoh untuk 1gb:

di terminal, jalankan di bawah

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

Solusi di atas akan berfungsi hingga reboot berikutnya, setelah itu swap harus diaktifkan kembali. Untuk mempertahankannya di antara reboot, tambahkan file swap ke fstab:

sudo nano /etc/fstab

buka file di atas tambahkan tambahkan baris di bawah ke file

/var/swap.1 swap swap sw 0 0

sekarang restart server. Komposer membutuhkan pekerjaan dengan baik.


6

Jalankan composer self-updatedan composer clearcache hapus vendor dan composer.lock mulai ulang lingkungan lokal Anda dan kemudian jalankan php -d memory_limit=-1 /usr/local/bin/composer install


2

Saya mendapat kesalahan ini ketika saya menjalankan composer installdi dalam wadah PHP DOCKER saya, Ini masalah memori. Diatasi dengan meningkatkan memori SWAP di DOCKER PREFERENSI dari 512MB menjadi 1,5GB


dan bagaimana Anda melakukannya?
max4ever

klik kanan pada Docker Desktop Icon -> Preferences -> Rousources
Inoubli

2

Tingkatkan batas memori untuk komposer

php -d memory_limit=4G /usr/local/bin/composer update

Mungkin perlu reboot setelah perubahan ini


0

Saya mendapatkan masalah ini karena paket yang tidak diperbarui dengan benar dengan wildcard, saya menggunakan langsung versi terakhir dan akhirnya berfungsi.

"l3 / cas-bundle": "~ 1.0" -------> "l3 / cas-bundle": "1.1.13"



0

Inilah cara saya berhasil menginstal paket maatwebsite \ excel dari komposer di Laravel Framework:

  1. Saya mengunduh file composer.json dan file composer.lock dari server jarak jauh saya.
  2. Saya jalankan composer updatedari command prompt lokal (kemudian tunggu sampai semua proses install selesai).
  3. Unggah file composer.lock ke server jarak jauh.
  4. dijalankan composer installdi remote server (tunggu sampai semua proses selesai).
  5. SELESAI


-1

Dipecahkan di Laravel / Homestead (Vagrant Windows)

  1. Edit Homestead.yamldan tingkatkan memori dari 2048 menjadi 4096

  2. gelandangan

  3. gelandangan ssh

  4. Instal Symfony dengan baris ini pada folder yang Anda pilih (harus tanpa file)

    COMPOSER_MEMORY_LIMIT=-1 composer create-project symfony/website-skeleton . -s dev

-2

Anda dapat mencoba mengatur preferred-installke "dist"dalam konfigurasi Komposer.


Pertanyaan ini tentang menginstal beberapa proyek Laravel. Bagaimana jawaban Anda terkait dengan itu?
Nico Haase

Pertanyaan ini tentang menginstal paket. Secara khusus, ini tentang masalah penginstalan paket yang terkait dengan RAM. Mengapa saya menyertakan informasi tentang WP dalam jawaban 2 tahun lalu? Saya tidak tahu. Sekarang saya telah memperbarui jawabannya, IMO mana yang sangat relevan sekarang.
XedinTak Diketahui

-3

Saya mendapatkan kesalahan ini di lingkungan Docker lokal. Saya menyelesaikannya hanya dengan memulai ulang Docker.

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.