PHP Composer 업데이트“메모리를 할당 할 수 없습니다”오류 (Laravel 4 사용)


169

나는 이것을 해결할 수 없다.

Linode 1G RAM 기본 계획을 세우고 있습니다. Composer를 통해 패키지를 설치하려고하는데 나에게 도움이되지 않습니다. PHP.ini에서 메모리 제한이 "-1"로 설정되었습니다.

이것을 설치하기 위해 할 수있는 다른 일이 있습니까?

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

답변:


97

조금 오래되었지만 새로운 누군가가 해결책을 찾고 있다면 PHP 버전을 업데이트하면 문제를 해결할 수 있습니다.

또한 composer.lock 파일을 커밋하고 리소스를 덜 사용하는 프로덕션 환경에서 composer 설치를 수행해야합니다.

자세한 내용은 여기 : https://github.com/composer/composer/issues/1898#issuecomment-23453850


12
훌륭한! 효과가있었습니다. PHP를 업그레이드하지 않았지만 composer.lock 파일을 커밋하고 모든 것을 올바르게 설치했습니다. 감사합니다.
ericbae

6
파티에 늦었지만 아파치와 MySQL을 끄기 만하면됩니다. 512MB RAM VPS를 사용하는 이유가 있습니다. 돈을 쓰고 싶지 않습니다.
Kumar

11
PHP 업데이트는 해결책이 아닙니다. 7.0.21이 있는데 여전히이 오류가 발생합니다.
cj5

@ Kumar의 솔루션이 나를 위해 일했습니다. 매우 쉽고, 대부분의 것들과 마찬가지로, 뒷이야기에서 명백합니다.
James Bridgewater

고마워 많은 시간을 절약했습니다.
Jay Geeth

404

스왑 메모리가 부족한 것 같습니다.

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

아래 의견에 @ BlackBurn027이 언급 했듯이이 솔루션은 여기 에 설명되어 있습니다


27
당신은 천재입니다-PHP 문제가 아니며 파일을 제거해도 도움이되지 않습니다. VPS의 지침 (sudo 포함)을 따라야합니다. 이것은 VPS 소유자에게 유일하게 유용한 답변입니다.
Croll

4
getcomposer.org/doc/articles/… 출처 에서 언급 한 바와 같이
BlackBurn027

1
이것은 나를 위해 일했지만 그 명령이 실제로하는 일을 혼란스럽게 생각합니다.
Joseph Astrahan

2
때때로 1024는 충분하지 않습니다 ... 대신 2048을 사용하십시오
psylosss

1
@JaberAlNahian 영구 교환을 할 수 있습니다 여기에서 확인하십시오 digitalocean.com/community/tutorials/…
Mohammed Omer

80

작곡가 문제 해결 가이드는 여기 에 VPS에 메모리가 부족하고 스왑 공간이 활성화되어 있지 않기 때문에 발생할 수 있습니다.

free -m

스왑을 활성화하려면 예를 들어 다음을 사용할 수 있습니다.

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

또는 위의 방법으로 작동하지 않으면 스왑 파일을 만들 수 있습니다

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

감사합니다 php5를 php7로 업그레이드하지 않고 많이 작동했습니다
Shadab K

Linux의 CLI
Umair Hamid

오류가 다시 발생했지만 그 후에 composer 업데이트를 실행하면 정상적으로 작동했습니다.
Amir Hajiha '14

[공식 문서]를 확인할 수 있습니다. [2] getcomposer.org/doc/articles/…를
Thilina Dharmasena

38

나는 같은 문제에 직면했다. 메모리가 적은 AWS 프리 마이크로 인스턴스를 사용하고 있습니다. 나는 항상 아래 옵션 중 하나를 시도하고 항상 작동합니다 (이 모든 것이기 전에 최신 버전의 작곡가가 설치되어 있는지 확인하십시오)

sudo php -dmemory_limit=750M composer.phar update

또는 공급 업체 폴더의 내용을 제거하고 composer 업데이트를 시도하십시오.

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

두 번째 옵션은 모든 구성 요소를 업데이트하려고 시도합니다. 업데이트가 없으면 캐시에서 패키지를 선택하고 그렇지 않으면 dist에서 선택합니다

참고 : 메모리 제한은 원하는대로 변경하십시오.

또는

크리에이트 스왑 파티션을 시도. 스왑 파티션은 리눅스가 실제 메모리가 부족할 때 가상 메모리로 사용하는 하드 드라이브의 일부입니다. 실제 파일을 사용하는 대신 Windows 스왑 파일과 비슷하지만 Linux는 하드 드라이브의 파티션을 대신 사용합니다.

도움이 되었기를 바랍니다


1
메모리 제한을 500M으로 낮추고 작곡가가 필요한 것을 설치했습니다.
devNoise

파티션 대신 실제 스왑 파일을 사용할 수도 있습니다. 참조 cyberciti.biz/faq/linux-add-a-swap-file-howto
rwilson04

2
내 디지털 오션에 같은 문제를 내가 그것을 실행하기 전에 250M 나 또한 처음 아파치와 MySQL을 중지했다 심지어 계정 있었다
tristanbailey

tristanbailey 솔루션이 작동했습니다. 감사합니다! mysql과 apache를 중지하기 전에 PHP 메모리 제한을 설정해도 업데이트 할 수 없었습니다.
Elias Kouskoumvekakis

내가 실행할 sudo php -dmemory_limit=750M composer.phar update 때이 오류가 발생 Could not open input file: composer.phar도와주세요
Varun Naharia

15

다음 명령을 입력하십시오.

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

메모리 부족 시스템에서 작동


나를 위해 일했다. 나는 여기 위에 포괄적 인 답을 작성했습니다 - stackoverflow.com/questions/26850332/...
halkujabra

작동하지 않습니다. 그리고 이것은 내 공급 업체 폴더를 모두 삭제했습니다. 잘못되었습니다!
블라디미르 코발 추크

공급 업체 삭제 문제는 무엇입니까? 설치 / 업데이트를 다시 실행하십시오 ...
서명

1
공급 업체 삭제는 사이트가 중단되고 설치가 여전히 작동하지 않는 경우 사이트를 중단 된 상태로 유지하지만 완전히 잘못된 것은 아닙니다. 그러나 프로덕션 시스템에서 잠금 파일을 삭제하지 않는 것이 좋습니다. 잠금 파일을 커밋하고 업데이트하지 않고 설치 만해야합니다. 실제로 잠금 파일을 삭제하면 메모리를 많이 사용하는 프로세스가 시작되는 json 파일에서 Composer를 강제로 설치하게됩니다 (설치할 버전을 결정).
Shauna

프로덕션 환경에 있지 않다면 설치를 완료 할 때까지 프로젝트를 중단 할 것이기 때문에이 작업을 수행해도됩니다.
Bizarro

11

문제를 해결하는 단계는 다음과 같습니다. (즉시 빠른 SWAP 파일 할당 방법 사용)

서버 SWAP 설정 (메모리 부족 오류를 해결하기위한 Ubuntu 16.04 SWAP)

스왑, 메모리 및 디스크 크기가 이미 있는지 확인하십시오.

    sudo swapon -s
    free -m
    df -h

스왑 파일 만들기 : (4GB SWAP 메모리를 원하는 경우 1G를 4G로 변경)

    sudo fallocate -l 1G /swapfile 

스왑 파일을 확인하십시오.

    ls -lh /swapfile

스왑 파일 할당 :

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

스왑 가능, 메모리 및 디스크 크기를 확인하십시오.

    sudo swapon -s
    free -m
    df -h

시스템 재시작시 스왑 파일 첨부 :

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

스왑 파일 설정 조정 :

    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 파일 우선 순위 : (0-100 % => 0 : 스왑하지 않고, 100 : SWAP를 넣고 RAM을 비 웁니다)

        vm.swappiness=10

캐시에서 아이 노드 제거 : (100 : 캐시에서 아이 노드 정보를 너무 빨리 제거합니다)

        vm.vfs_cache_pressure = 50

마지막 단계에서해야 할 일을 모르겠습니다 sudo nano /etc/sysctl.conf. 그래서 건너 뛰고 Nginx를 다시 시작한 다음 composer install(이전에는 공급 업체 디렉토리를 제거했습니다) 작동합니다. 감사!
arhakim

10

나는 방랑자와 같은 문제가 있었다. 더 많은 메모리를 할당하여 수정했습니다.

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

1
나 에게도이 문제를 해결했습니다. 대신 vagrant 2.x에서 vb.customize ...할 수 있습니다 vb.memory = 1024.
acobster

10

시험

기본적으로 스왑 메모리를 높이고 있습니다.

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
다른 사람들이 그로부터 배울 수 있도록 답변에 설명을 추가하십시오.
니코 하세

나는 이것이 더 많은 설명이 필요하다는 것에 동의하지만 그것은 나를 위해 일했다 (기본적으로 스왑 메모리를 높이는 것). 감사!
user1015214

8

그것을보십시오 :

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

1
다른 사람이 그로부터 배울 수 있도록 귀하의 답변에 설명을 추가하십시오. 특히 동일한 접근법을 사용하는 다른 답변과 비교하여 무엇을 변경 했습니까? 답변을 복제해야합니까?
니코 하세

7

내가 찾은 해결 방법은 다음과 같습니다.

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
와우, 명령을 게시하지 않고 명령을 게시하는 것은 아마도 위험합니다! 확실히 그것이 대부분의 시스템에서 작동한다고 말할 수는 있지만. 기본적으로 HD를 RAM으로 사용할 수 있도록 할당 스왑 공간을 만듭니다. 다음은 각 명령을 설명하는 방법에 대한 포괄적 인 안내서입니다. digitalocean.com/community/tutorials/…
adelriosantiago

명령을 명확히 해주셔서 감사합니다. 스크립트를 실행하기 전에 실제로 무엇을하는지 아는 것이 좋습니다. 그러나 같은 방식으로 디지털 오션과 튜토리얼 / 블로그 게시물을 홍보하는 방법은 좋지 않습니다.
Goran

튜토리얼은 훌륭하며 설명과 함께 단계별로 표시됩니다!
Tarik

감사합니다! 1GB RAM 서버용 Drupal Presto 설치 지침이 나와 있습니다. 1024에서 2048로 변경했습니다.
Nikit

7

난 그냥 삭제하여 시도 공급 업체 폴더composer.lock 파일을 다음 내가 명령을 실행 composer clear-cache한 후와 composer install. 따라서 오류없이 작동합니다.


6

다음을 사용하여 여유 (스왑) 메모리를 확인할 수 있습니다

free -m

total used free shared buffers cached

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

스왑을 활성화하려면 예를 들어 다음을 사용할 수 있습니다.

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

나는 사용했다 free -m 스왑에서도 메모리가 없다는 것을 하고 알아 차렸다.. 그 다음에 sudo reboot작동했다.
Eleazar Resendez

4

이것은 1GB 이하의 서버 인스턴스에서 반복되는 문제인 것 같습니다. 프로세스 종료 및 스왑 설정 조정 외에도 로컬 컴퓨터에 설치하고 업로드 할 수 있습니다.


1
네. 재미있는 것은 전체 프로젝트를 삭제하고 새로운 자식 풀을 수행 한 다음 작곡가 설치를 수행하면 작동하는 것 같습니다. 이상한.
ericbae

실망스럽게도 1GB Linode 인스턴스에 L4 프로젝트를 몇 개 배포하고 메모리 상한에 도달 할까 걱정하고 있습니다.
Makita

이전 링크이지만 일부 사용 가능 : github.com/composer/composer/issues/1104
Makita

2
허용되는 답변은 여전히 ​​최선의 방법입니다. composer.lock을 커밋 한 다음 프로덕션 서버에서 업데이트 대신 설치를 실행해야합니다.
Makita

3

때로는 자체 업데이트 작곡가를 통해 문제를 해결합니다.

php composer.phar self-update

건배


이 문제를 해결하기 위해 가장 먼저 시도해야합니다. 1.3.3에 문제가 있었고 1.4.0으로 자체 업데이트하면 문제가 해결되었습니다. 팁 : composer self-update작곡가에 익숙하지 않은 사람이이 답장을 읽는 경우의 사용 사례를 다루도록 답변을 업데이트 할 수 있습니다 .
Niklaus

이름이 변경되면 권한이 거부됩니다
Andrew

3

이 시도:

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

Centos 6에서 나를 위해이 작업


이것은 AWS Opsworks EC2 인스턴스 우분투 14.04에서 나를 위해 일했습니다! 감사!
Paul Preibisch

3

PHP memory_limit를 기본 128M 에서 512M 으로 늘리고 서버를 다시 시작했습니다. 문제가 해결되었습니다.


3
PHP는 서비스로 실행되지 않으므로 재부팅 할 필요가 없습니다.
HelpNeeder

1
아파치가 아니라 아파치가 작동하기 위해서는 다시 시작해야한다.
Dediqated

1
아파치가 PHP 모듈을로드 할 때 필요하다
Aris

2

나는이 상황에 대부분 들어가서 일반적으로 스왑 메모리 설정 단계를 수행했습니다.

그러나 이제는 나를 위해 일한 간단한 대체 트릭을 발견했습니다.

composer update --no-dev이외의 달리기 composer update


2

나는 Vagrant에서 동일한 문제를 해결했습니다. memory_limit 의 값을 늘리고 composer 캐시를 삭제하십시오 : sudo rm -R ~ / .composer 및 마지막으로 vagrant reload.



1

스왑하고 composer 명령을 다시 실행하십시오. 그것이 효과가 있기를 바랍니다.

 $ 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

제 경우에는 위에 나열된 모든 것을 시도했습니다. Laravel과 Vagrant를 4GB의 메모리와 스왑으로 사용하고 메모리 제한은 -1로 설정했습니다. 공급 업체를 삭제하고 다른 PHP 버전을 시도했습니다. 마지막으로, 나는 그것을 실행하여 작동하도록 관리했습니다.

vagrant halt
vagrant up

그런 다음 작곡가 설치가 평소대로 다시 작동했습니다.


0

DigitalOcean으로 호스팅되는 가장 저렴한 서버 (512MB RAM)에서 비슷한 문제가 발생했습니다. 동일한 서버에서 Jenkins CI를 실행하고있었습니다. Jenkins 인스턴스를 중지 한 후 composer install 명령이 작동했습니다 (잠시 적으로 이미 설치되어있는 것 외에도 mcrypt 확장이 누락되어 실패했습니다!).

서버에서 다른 앱을 실행중인 경우 중지하고 명령을 다시 실행 해 볼 가치가 있습니다.


0

js 번들링을 비활성화하고 메모리를 늘리십시오. 해결해야합니다. js 번들링을 비활성화하여 문제를 해결했습니다.

감사


답변에 대한 자세한 내용을 알려주십시오. 패키지를 다운로드 할 때 오류가 발생했을 때 "js 번들링"을 비활성화해야하는 이유 (스크립트가 실행되기 전에 발생)
Nico Haase

-1

php.ini 파일을 편집하고 memory_limit 값을 늘리십시오.

memory_limit = 1G

이 문제를 해결할 것입니다.


-1
composer update

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

> mmap () 실패 : [12] 메모리를 할당 할 수 없습니다

서버의 메모리를 업데이트하고 '4G'가 필요합니다. 4GB 램 변경 [서버 유형을 변경하거나 추가 램 추가]

2 파일 편집해야합니다


명령에

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

편집 "memory_limit 756M”하다4G


PHP 7.0의 PHP Ini

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

memory_limit = 128M ~ 4G

#AWS #AMAZONLINUX # MAGENTO2 # PHP7.0


1
답변에 설명을 추가하십시오. 웹 서버를 통해 실행 .htaccess되지 않으므로 아무것도 변경 하지 않아도 composer됩니다.
Nico Haase
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.