Trình soạn nhạc yêu cầu hết bộ nhớ. PHP Lỗi nghiêm trọng: Kích thước bộ nhớ được phép 1610612736 byte đã cạn kiệt


226

Tôi đang cố gắng thêm HWIOAuthBundle vào dự án của mình bằng cách chạy lệnh dưới đây.

composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

HWIOAuthBundle github: https://github.com/hwi/HWIOAuthBundle

Khi tôi cố gắng chạy trình soạn nhạc yêu cầu, tôi nhận được lỗi hết bộ nhớ.

Sử dụng phiên bản ^0.6.0@dev cho hwi / oauth-pack Sử dụng phiên bản ^1.2@dev cho php-http / guzzle6-adapter Sử dụng phiên bản ^1.10@dev cho php-http / httplug-pack ./composer.json đã được cập nhật Đang tải kho của nhà soạn nhạc với thông tin gói Cập nhật phần phụ thuộc (bao gồm cả request-dev)

PHP Lỗi nghiêm trọng: Kích thước bộ nhớ được phép là 1610612736 byte đã cạn kiệt (đã cố gắng cấp phát 67108864 byte) trong phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver. php trên dòng 220

Lỗi nghiêm trọng: Kích thước bộ nhớ được phép là 1610612736 byte đã cạn kiệt (đã cố gắng phân bổ 67108864 byte) trong phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php trên dòng 220

Tôi đã thử đặt memory_limit thành 2G trong tệp php.ini của mình nhưng không hoạt động. Tôi đã tìm thấy php.ini của mình bằng cách chạyphp -i | grep php.ini


3
Gần đây bạn đã thực hiện tự cập nhật nhà soạn nhạc chưa? Không chắc liệu 1.4.2 trong thông báo lỗi của bạn có chỉ ra phiên bản 1.4.2 hay không nhưng phiên bản mới nhất của trình tổng hợp là 1.6.2. Và bạn có bao nhiêu bộ nhớ vật lý? Nó là một máy chủ vm hay đám mây?
Cerad

@Cerad Có - Tôi đã làm một nhà soạn nhạc tự động cập nhật trước và phiên bản soạn nhạc của tôi là 1.6.2
Brian Chen

@Cerad này là trên máy tính địa phương của tôi và tôi chắc chắn nên có đủ bộ nhớ
Brian Chen

Khi gặp sự cố này trên các dự án mà Composer đã chạy tốt trước đây, tôi khuyên bạn nên chạy composer self-update --rollback. Tôi bắt đầu gặp tình trạng cạn kiệt bộ nhớ với v.1.9.3, phiên bản này đã dừng lại khi tôi quay trở lại 1.8.6.
karolus

Không ai khác nghĩ rằng thật điên rồ khi chạy composer requirecó thể sử dụng hơn 1,5G bộ nhớ? Khi tôi lần đầu tiên nhìn thấy nó, tôi đã nghĩ rằng nó phải là một lỗi trong nhà soạn nhạc. Đặt giới hạn bộ nhớ thành -1 đã làm việc với tôi ... nhưng làm thế quái nào mà 1,5G lại không đủ? Nhà soạn nhạc có thể thực sự cần nhiều như vậy?
Daniel Howard

Câu trả lời:


341

Để nhận giá trị memory_limit hiện tại, hãy chạy:

php -r "echo ini_get('memory_limit').PHP_EOL;"

Thử tăng giới hạn trong php.initệp của bạn (ví dụ: /etc/php5/cli/php.iniđối với các hệ thống giống Debian):

; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1

Hoặc, bạn có thể tăng giới hạn bằng đối số dòng lệnh:

php -d memory_limit=-1 composer.phar require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

Để tải vị trí tệp php.ini, hãy thử:

php --ini

Một giải pháp nhanh chóng khác:

php composer.phar COMPOSER_MEMORY_LIMIT=-1 require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

31
COMPOSER_MEMORY_LIMIT = -1 bản cập nhật nhà soạn nhạc cũng phù hợp với tôi.
Kishan Patel

1
Cảm ơn vì lệnh php --ini! trong php 7.4, bạn có một tệp php ini khác (php-cli.ini) cho clid
Vincent Decaux

4
sử dụng php -d memory_limit=-1 composer.phar installlàm việc cho tôi. Cảm ơn!
Tomasz Kuter

1
memory_limit = -1 có phải là giải pháp tốt không? có vẻ như nó loại bỏ mọi giới hạn tiêu thụ bộ nhớ và có thể sử dụng hết nó.
kamote ulalo

1
Trên Windows, sử dụngSET COMPOSER_MEMORY_LIMIT=-1
Vincent Decaux

272

Trong trường hợp của tôi, tôi đang cố gắng yêu cầu gói này và tôi đã nhận được PHP Fatal error: Allowed memory size of.

Tôi thấy nó dễ chạy như vậy và bạn không phải cập nhật tệp PHP INI.

thí dụ: COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

Hy vọng điều này sẽ giúp ai đó.


Cũng được giúp đỡ. Giới hạn PHP của tôi là 128MB, nhưng thông báo lỗi cho biết giới hạn trình tổng hợp PHP là 1,5 GB (có nghĩa là nó được định cấu hình ở nơi khác cho trường hợp cụ thể này). Vì vậy, việc sửa đổi php.ini không giúp được gì, nhưng câu trả lời này đã làm được.
Tom

73

Một giải pháp khác từ sách hướng dẫn :

Composer cũng tôn trọng giới hạn bộ nhớ được xác định bởi COMPOSER_MEMORY_LIMITbiến môi trường:

COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>

Hoặc trong trường hợp của tôi

export COMPOSER_MEMORY_LIMIT=-1
composer <...>

12
Trên mac, tôi đã chỉnh sửa ~/.bash_profileđể thêm alias composer="COMPOSER_MEMORY_LIMIT=-1 composer"và điều đó đã giải quyết nó cho tôi. Hãy chắc chắn để nguồn tập tin sau khi thay đổi hoặc khởi động lại thiết bị đầu cuối của bạn
nicholas.alipaz

42

Trên Windows 10;

Đi đến C:\ProgramData\ComposerSetup\bin

Chỉnh sửa: composer.batvà thêm memory_limit=-1vào dòng cuối cùng như hình dưới đây.

@echo OFF
:: in case DelayedExpansion is on and a path contains ! 
setlocal DISABLEDELAYEDEXPANSION
php -d memory_limit=-1 "%~dp0composer.phar" %*

Vấn đề đã được giải quyết;)


3
cái tốt nhất cho tôi, hầu như tất cả chúng đều không phù hợp với tôi.
krachleur

1
Tôi cũng phải cập nhật tệp composer mà không có phần mở rộng .bat (thêm cùng -d memory_limit = -1) vào dòng cuối cùng.
Maulik Gangani

Trong các cửa sổ, vị trí composer.batcần thiết không phải C:\ProgramData\ComposerSetup\binlúc nào cũng có, nhưng tôi đoán đó là vị trí mặc định. Tuy nhiên, nếu ai đó muốn tìm vị trí của composer.batchỉ cần chạy wherelệnh: like where composer. Điều đó sẽ hiển thị vị trí chính xác.
rineez

26

Vì không có câu trả lời nào trước đây bao gồm setnên tôi phải mất một chút thời gian để tìm ra cách thực hiện điều đó trong Windows mà không thay đổi php.ini, nhưng đây là những gì hiệu quả với tôi:

set COMPOSER_MEMORY_LIMIT=-1
composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

1
Đây là câu trả lời tốt nhất cho môi trường Windows. Cảm ơn :)
sykez

23

Chỉ cần thiết lập memory_limitchỉ định toàn bộ tuyến đường của tệp composer.phar của bạn và cập nhật, trong trường hợp của tôi bằng lệnh:

php -d memory_limit=-1 C:/wamp64/composer.phar update

6
Cũng COMPOSER_MEMORY_LIMIT=-1 composer.phar updatehoạt động. Xem: getcomposer.org/doc/articles/…
mayid

5
trên ubuntu sử dụng cái nàyphp -d memory_limit=-1 /usr/bin/composer update
lén lút

COMPOSER_MEMORY_LIMIT = -1 nhà soạn nhạc cũng làm việc cho tôi .. @mayid Cảm ơn bạn. : +1
Kishan Patel

19

Gần đây, người ta đã xác định rằng Composer sử dụng CPU + bộ nhớ cao trên các gói có nhiều thẻ lịch sử. Xem nhà soạn nhạc / nhà soạn nhạc # 7577

Một giải pháp cho vấn đề này là sử dụng symfony/flexhoặc https://github.com/rubenrua/symfony-clean-tags-composer-plugin

composer global require rubenrua/symfony-clean-tags-composer-plugin

Bạn chỉ cần cài đặt plugin trên toàn cầu? Không có gì khác để được thực hiện? Bạn có thể vui lòng giải thích plugin này thực sự làm gì không? Có làm giảm mức sử dụng bộ nhớ của nhà soạn nhạc trong những trường hợp như vậy không?
rineez

17

Đề phòng trường hợp bạn gặp lỗi nhà soạn nhạc với:

Không thể mở tệp đầu vào: composer

chạy:

php -d memory_limit=-1 /usr/local/bin/composer require ...

13

Để bỏ qua giới hạn bộ nhớ và lỗi phiên bản, hãy sử dụng mã bên dưới:

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name> --ignore-platform-reqs

12

Đối với lỗi này trong macOS Catalina và macOS Big Sur, hãy sử dụng dòng này:

php -d memory_limit=-1 /usr/local/bin/composer update --no-plugins

Tôi đã sử dụng dòng này để cập nhật trên Symfony 5. Lệnh này cũng hoạt động với laravel 7.


11

Đôi khi vấn đề nằm ở giới hạn bộ nhớ của nhà soạn nhạc. Trong trường hợp của tôi, tôi đã thử tăng giới hạn bộ nhớ php nhưng vẫn gặp lỗi. Bạn có thể sử dụng COMPOSER_MEMORY_LIMIT=-1để giải quyết vấn đề đó. Sử dụng nó làm tiền tố:

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

Bạn phải thêm tiền tố nó một lần nữa trong tương lai.

Hi vọng điêu nay co ich.


10

Tôi đã vượt qua sự cố trong máy ảo Homestead Laravel (vagrant) đang chạy các lệnh của trình soạn nhạc trước COMPOSER_MEMORY_LIMIT=-1:

Ví dụ

Để cập nhật Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

Để cài đặt một gói:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

Cảm ơn anh bạn! Nó được cập nhật toàn cầu hay chỉ cho lệnh cụ thể đó?
andcl

1
Chỉ là một giải pháp tạm thời cho lệnh cụ thể đó.
Davide Casiraghi

Điều này rất hữu ích - cảm ơn bạn!
Brittany

8

những gì về cửa sổ?

tôi sử dụng windows 10 và lệnh này phù hợp với tôi,

php -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update


5

Bạn có thể sử dụng Phiên bản php cụ thể khi chạy Trình soạn nhạc

Nếu, giống như tôi, vì một lý do nào đó, bạn đang sử dụng PHP 32 bit mặc dù máy tính của bạn là 64 bit, điều này sẽ luôn giới hạn lượng bộ nhớ được cấp cho Composer. Tôi đã giải quyết vấn đề của mình theo cách này:

  • Cài đặt phiên bản php 64 bit ở đâu đó trên máy tính của bạn (giả sử trong C: / php64)
  • Trong trình soạn nhạc (sử dụng cygwin trong trường hợp của tôi), hãy chạy:

COMPOSER_MEMORY_LIMIT=-1 C:/php64/php.exe ../composer.phar update


Đề xuất này đã làm việc cho tôi! Cảm ơn. Một lưu ý là bạn cũng cần cập nhật biến môi trường hệ thống để sử dụng phiên bản 64bit mới trên toàn cầu.
GentleGiant

5

Cùng một vấn đề, không có bất kỳ thứ gì liên quan đến "memory_limit" hoạt động, nhưng ..

composer self-update --2

.. đã giải quyết vấn đề của tôi. (nâng cấp: 1.10.17 -> 2.0.4)


3

Chỉ muốn chia sẻ hoàn cảnh của tôi về vấn đề này.

Bối cảnh vấn đề:

  1. Chạy nhà soạn nhạc trong một hộp lang thang.
  2. Nhận được thông báo này sau khi cố gắng chạy trình soạn nhạc yêu cầu "laravel-doct / orm: ~ 1.4.13":

Lỗi nghiêm trọng: Kích thước bộ nhớ được phép là 1610612736 byte đã cạn kiệt (đã cố gắng phân bổ 4096 byte) trong phar: ///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php trên dòng 52 Kiểm tra https: // getcomposer. org / doc / article / domains.md # memory-limit-error để biết thêm thông tin về cách xử lý lỗi hết bộ nhớ.

  1. Đã thử đặt giới hạn bộ nhớ php.ini thành -1. (vẫn không làm việc).

Giải pháp:

  1. Rõ ràng composer.json và composer.lock của tôi có một số vấn đề. Ran $ composer xác thực, và kết quả là: "Tệp khóa không được cập nhật với những thay đổi mới nhất trong composer.json, bạn nên chạy composer update."

  2. Vì vậy, tôi đã chạy bản cập nhật $ composer và tất cả các phụ thuộc đã được giải quyết. Imho, khi phần phụ thuộc có một số vấn đề, có thể cấu trúc cây không đồng bộ, do đó gây ra vấn đề hết bộ nhớ.

Hy vọng điều này sẽ giúp bất cứ ai ngoài đó.


3

trong windows bằng xampp tôi vừa thay đổi:

;memory_limit=512M 

trong php.ini thành:

memory_limit =-1

sau đó khởi động lại Apache bằng xampp

Đây là kết quả:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit =-1
;memory_limit=512M

2
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52 Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.

đặt memory_limit thành -1 phù hợp với tôi;) (vim /etc/php/7.2/cli/php.ini)


2

Để ghi đè điều này và khắc phục sự cố trên máy cục bộ của bạn, bạn có thể thực hiện các thay đổi sau trong php.initệp cấu hình của mình .

  1. Để định vị php.initệp cấu hình của bạn, bạn có thể sử dụng lệnh sau:php --ini

Sau khi chạy lệnh này, bạn sẽ thấy một kết quả như sau:

Configuration File (php.ini) Path: /usr/local/etc/php/7.3
Loaded Configuration File:         /usr/local/etc/php/7.3/php.ini <---- note the path
Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.3/conf.d/ext-opcache.ini

Tệp chúng tôi muốn thay đổi là Cấu hình đã tải .

  1. Mở và tìm kiếm cái memory_limitmà bạn có thể đặt memory_limit = -1để cung cấp số lượng bộ nhớ không giới hạn cho các quy trình PHP hoặc bạn có thể đặt512MB, 1G, 2G, 5G,....

    $ nano /usr/local/etc/php/7.3/php.ini

xác định vị trí và đặt:

$ memory_limit = -1 or memory_limit = 1G
  1. Sau khi lưu tệp của bạn, bạn có thể xác minh các thay đổi PHP bằng cách chạy lệnh này, lệnh này sẽ xuất ra cài đặt bộ nhớ hiện tại trong php.initệp của bạn :

    php -r "echo ini_get ('memory_limit'). PHP_EOL;"

LƯU Ý: Sau khi lưu, bộ nhớ mới sẽ hoạt động. Bạn không cần phải làm bất cứ điều gì khác.

Thông tin thêm: https://support.acquia.com/hc/en-us/articles/360036102614-Overriding-memory-limits-during-local-development-with-Composer


2

Đối với Macbook: chạy lệnh sudo nano ~/.bash_profilechỉnh sửa alias composer="COMPOSER_MEMORY_LIMIT=-1 composer"tệp bash_profile sau đó thêm tệp đó vào, sau đó lưu và thoát.

Hy vọng điều này sẽ giải quyết vấn đề; Chúc bạn viết mã vui vẻ!


2

Trên Mac php 7.4

chạy

php --ini

Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-opcache.ini,
/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

Nếu các tệp .ini bổ sung được phân tích cú pháp: memory_limit cần được thay đổi trong

/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

Như Jose Seie viết, hãy đặt bộ nhớ thành

memory_limit = -1 or memory_limit = 1G

1

Tôi đã cô đọng hoặc đóng gói câu trả lời hữu ích và được chấp nhận ở đây thành các bí danh / hàm có thể sử dụng lại (zsh), để sử dụng lại nhanh hơn và dễ nhớ hơn:

# composer high-memory
composermem() {
  php -r "echo ini_get('memory_limit').PHP_EOL;"
}
alias composerbig='COMPOSER_MEMORY_LIMIT=-1 composer $1'

( php composer.pharđã được đặt bí danh composertrên hệ thống).


1

Tôi đã giải quyết vấn đề này bằng lệnh này COMPOSER_MEMORY_LIMIT = -1

Ví dụ: COMPOSER_MEMORY_LIMIT = -1 trình soạn nhạc yêu cầu ấu trùng / ui


0

Đây là một cách khác để giải quyết vấn đề này trong cửa sổ, nếu bạn sử dụng Wampserver. Thật vậy, ở cấp độ wampserver, có hai tệp php.ini , của PHP, mà người ta có thể tìm thấy ở vị trí C: \ wamp64 \ bin \ php \ phpx.xx \ php.initệp của Apache, có thể là được tìm thấy tại vị trí C: \ wamp64 \ bin \ apache \ apachex.xx \ bin \ php.ini . Cả hai tệp này đều có tham số memory_limit. Vì vậy, để chắc chắn giải quyết vấn đề này, tốt hơn là đặt tham số memory_limit = -1 trong cả hai tệp cùng một lúc.


Việc đặt memory_limitmáy chủ web sẽ không ảnh hưởng gì đến việc chạy Trình soạn nhạc. Ngoài ra, sử dụng memory_limit = -1toàn cầu nên là tùy chọn cuối cùng, vì điều này sẽ mở tất cả các quy trình PHP đang chạy đến tình trạng cạn kiệt bộ nhớ. Better thiết lập nó chỉ khi bạn cần đến nó, gắn trực tiếp vào quá trình khởi động
Nico Haase

0

Đảm bảo không yêu cầu gói trước khi đảm bảo thư mục nhà cung cấp tồn tại.

Kiểm tra xem bạn đã làm composer installtrước đây chưa. Bạn có thể vừa được sao chép kho lưu trữ vào máy của mình. Vì vậy, bạn phải cài đặt các gói cũ trước khi yêu cầu một gói mới. Hoặc bạn có thể muốn đưa tùy chọn này --profilevào lệnh soạn nhạc của mình để xem thông tin sử dụng bộ nhớ và thời gian.


0

Đối với centos7 người dùng mà php.inilà ở/etc/php.ini/

  1. chạy lệnh này sudo vi /etc/php.ini
  2. enter /memory_limitđể tìm kiếm memory_limitbiến
  3. thay đổi nó thành memory_limit = -1
  4. nhấn escphím và nhập :wq(viết và thoát)
  5. sau đó khởi động lại apache sudo systemctl restart httpd

1
trong windows bằng xammp, tôi chỉ cần thay đổi; memory_limit = 512M trong php.ini thành memory_limit = -1
saber tabatabaee yazdi

Người ta không được vô hiệu hóa giới hạn bộ nhớ chung chỉ để sử dụng trình soạn nhạc.
emix

0

Tôi đang sử dụng php7.2 và kích thước được đặt thành memory_limit = 512Mmặc định. để tăng kích thước, bạn cần xác định vị trí php.ini.

Trong Wamp, nó nằm ở C:\wamp64\bin\php\php7.2.23\php.ini. Vui lòng để ý phiên bản PHP vì nó là thư mục tên, trong trường hợp của tôi, tôi cóphp7.2.23

Trong Laragon, nó được đặt trong C:\laragon\bin\php\php-7.2.23-Win32-VC15-x64\php.initrường hợp của tôi.

Nếu bạn không muốn cho phép không gian vô hạn, bạn có thể đặt bất kỳ kích thước nào thuận tiện cho bạn, trong trường hợp của tôi, tôi đã làm memory_limit = 2G

nếu bạn muốn cho phép không gian không giới hạn, bạn có thể thay đổi thành memory_limit = -1


0

Tôi đã giải quyết vấn đề này qua php.ini vừa thay đổi memory_limit = 2G


0

Thử tăng giới hạn trong tệp php.ini của bạn (ví dụ: /etc/php5/cli/php.ini dành cho các hệ thống giống Debian):

; Sử dụng -1 cho không giới hạn hoặc xác định một giá trị rõ ràng như 2G memory_limit = -1


1
Vui lòng không trùng lặp các câu trả lời hiện có, trừ khi bạn có điều gì đó mới để thêm
Nico Haase
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.