作曲家在更新时被杀死


113

我遇到了一个问题,我试图为我的Laravel 4项目安装一个新软件包。但是当我跑步时php composer.phar update我得到了:

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

我在Internet上寻找问题,发现内存是问题,我认为我没有足够的RAM,我检查了一下一下我有411mb的空闲空间。作曲家真的需要更多RAM吗?

Answers:


289

“已杀死”消息通常表示您的进程消耗了太多内存,因此,如果可能,您可能只需要向系统中添加更多内存即可。在编写此答案时,我必须将虚拟机的内存增加到至少768MB,以便composer update在某些情况下可以正常工作。

但是,如果要在实时服务器上执行此操作,则根本不应该使用composer update。相反,您应该做的是:

  1. composer update在内存限制不应那么严格的本地环境中运行(例如,直接在便携式笔记本电脑/台式机上运行,​​或者在便携式计算机/台式机上运行的docker容器/ VM)。
  2. 上载或git pushcomposer.lock文件。
  3. composer install在实时服务器上运行。

composer install然后将从.lock文件中读取,每次都获取完全相同的版本,而不是查找每个软件包的最新版本。这使您的应用程序崩溃的可能性较小,并且作曲者使用的内存更少。

在此处了解更多信息:https : //getcomposer.org/doc/01-basic-usage.md#installing-with-composer-lock

或者,您可以将整个vendor目录上载到服务器,而无需完全运行composer install,但是您应该先运行composer dump-autoload --optimize


5
当我上传composer.lock并运行composer时,安装成功。谢谢!
Ehsan

这对我不起作用,composer是apt的安装程序,因此我将其删除并手动安装,然后一切正常。
rafaelphp

2
我在本地计算机上遇到此问题。
阿菲利娜'19

对于本地开发,请务必使用@ Balmipor's Answer或任何其他带有少量ram的服务器。
Shawn Pivonka

70

如果像我一样,您正在使用一些缺少内存的微型VM,则创建交换文件可以解决问题:

free -m
mkdir -p /var/_swap_
cd /var/_swap_
#Here, 1M * 2000 ~= 2GB of swap memory
dd if=/dev/zero of=swapfile bs=1M count=2000
mkswap swapfile
swapon swapfile
chmod 600 swapfile
echo "/var/_swap_/swapfile none swap sw 0 0" >> /etc/fstab
#cat /proc/meminfo
free -m

顺便说一句,随时为文件选择其他位置/文件名/大小。
/var可能不是最佳位置,但我不知道会在哪个位置,并且很少在意,因为小型服务器主要用于测试目的。


4
别忘了sudo–我必须使用root特权来运行这些命令。
MacDada

返回swapon: swapfile: swapon failed: Operation not permitted,为什么?
穆罕默德·戴亚斯·亚斯克

@Muhammad Dyas Yaskur如果没有权限问题(请确保以root用户身份使用或使用sudo),那么您的配置是否还有其他特殊要求(操作系统,驱动器类型等)?
Balmipour

@Balmipour我已经用作root了,但仍然不允许,我的操作系统是centos 7.0。 [root@server _swap_]# dd if=/dev/zero of=swapfile bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 2.79954 s, 375 MB/s [root@server _swap_]# ls -l total 1024004 -rw------- 1 root root 1048576000 Feb 6 02:12 swapfile [root@server _swap_]# mkswap swapfile Setting up swapspace version 1, size = 1023996 KiB no label, UUID=b3f1110e-5f43-4d1f-bbb1-71cad96680f9 [root@server _swap_]# swapon swapfile swapon: swapfile: swapon failed: Operation not permitted
穆罕默德·戴亚斯·亚斯克

1
最好在根模型中运行thosw命令。```须藤su```
dheeraj

19

不幸的是,作曲家需要大量的RAM和处理能力。我做了几件事,加起来使该过程可以接受。这是在我的云游戏围栏环境中。

  1. 您可能只是用光了RAM。启用交换:https ://www.digitalocean.com/community/search?q=add+ swap (注意:我认为最佳实践是添加单独的分区。Digitalocean的指南适用于他们的环境)
  2. service mysql stop (杀死您的DB / mem-hog服务以释放一些RAM-别忘了重新启动它!)
  3. 使用运行中的辅助终端会话top来监视内存/交换消耗,直到过程完成。
  4. composer.phar update --prefer-dist -vvv(详细输出[工作时仍会挂起],并使用发行版zip文件)。也许也试试--dry-run
  5. 显然,Composer在较旧版本的PHP(例如5.3x)中运行速度较慢。对于我来说,它在5.5.9中仍然很慢...

我换成tophtop,更方便。
DevonDahon

还要研究创建交换文件
Hari Harker

8

不需要额外内存的DigitalOcean修复-激活交换,这是1gb的示例:

在终端下面运行

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

上面的解决方案将一直工作到下一次重新启动,之后必须重新激活交换。要在两次重新引导之间保留它,请将交换文件添加到fstab中:

sudo nano /etc/fstab

打开以上文件,在文件中添加以下行

/var/swap.1 swap swap sw 0 0

现在重新启动服务器。作曲家要求工作正常。


6

运行composer self-updatecomposer clearcache 删除供应商和composer.lock,重新启动本地环境,然后运行 php -d memory_limit=-1 /usr/local/bin/composer install


2

增加作曲家的内存限制

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

更改后可能需要重启


1

我在composer installPHP DOCKER容器中运行时遇到此错误,这是内存问题。通过将DOCKER PREFERENCES中的SWAP内存从512MB增加到1.5GB解决


那你怎么做?
max4ever

右键单击Docker Desktop Icon->首选项-> Rousources
Inoubli,

0

我遇到这个问题是由于无法使用通配符正确更新的软件包引起的,我直接使用了最新版本,并且最终可以正常工作。

“ l3 / cas-bundle”:“〜1.0” ------->“ l3 / cas-bundle”:“ 1.1.13”



0

这是我从Laravel Framework中的composer成功安装maatwebsite \ excel软件包的方法:

  1. 我从远程服务器下载composer.json文件和composer.lock文件。
  2. composer update从本地命令提示符运行(然后等待所有安装过程完成)。
  3. composer.lock文件上传到远程服务器。
  4. composer install在远程服务器上运行(然后等待所有进程完成)。
  5. 完成


-1

在Laravel / Homestead(Vagrant Windows)上解决

  1. 编辑Homestead.yaml内存并将其从2048增加到4096

  2. 无所事事

  3. 流浪的SSH

  4. 使用此行在您选择的文件夹上安装Symfony(必须没有文件)

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

-2

您可以尝试在Composer配置中设置preferred-install"dist"


这个问题是关于安装一些Laravel项目的。您的答案与之有何关系?
Nico Haase

这个问题是关于安装软件包的。特别是,它是关于安装与RAM相关的软件包的问题。为什么我在2年前的答案中加入了有关WP的信息?我不知道。我现在更新了答案,这与IMO现在非常相关。
XedinUnknown

-3

我在本地Docker环境中遇到此错误。我只需重启Docker就解决了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.