Giới hạn bộ nhớ cập nhật trình soạn nhạc


85

Tôi cần chạy cập nhật trình soạn nhạc tại máy chủ của mình, vì vậy tôi đăng nhập bằng ssh và thử chạy comand:

composer update

thư mục inside / www nơi tôi cài đặt laravel và composer

nhưng tôi gặp lỗi: nhập mô tả hình ảnh ở đây

khi liên hệ với nhà cung cấp dịch vụ lưu trữ của tôi, họ yêu cầu tôi chạy lệnh:

php -d memory_limit=512M composer update

Tôi chạy lệnh này nhưng nhận được: "Không thể mở tệp: nhà soạn nhạc"

Để làm gì? Soluton ở đây là gì?


2
Như @Sven đã nói, trong sản xuất composer installlà đủ. Trong trường hợp của bạn, trong khi sử dụng shared hosting, tôi nghĩ bạn sẽ không hoạt động được composer update, vì vậy cách duy nhất là mua một VPS hosting như Digital Ocean, Linode.
Lucas Silva

Câu trả lời:


131

Khi bạn chạy composer update, hệ điều hành sẽ xem xét các đường dẫn đã định cấu hình và cố gắng tìm tệp thực thi có tên đó.

Khi đang chạy php composer update, composerchuỗi được coi như một tham số đối với PHP, không được tìm kiếm trong bất kỳ đường dẫn nào. Bạn phải cung cấp đường dẫn đầy đủ để chạy nó.

Việc chạy which composersẽ cho bạn biết nơi Hệ điều hành tìm thấy tệp thực thi của trình tổng hợp và sau đó bạn chỉ cần sử dụng đường dẫn đầy đủ trong lệnh PHP:

$>which composer
/usr/local/bin/composer

$>php -d memory_limit=512M /usr/local/bin/composer update
...

Lưu ý rằng 512MB có thể là quá ít. Nhận thức của tôi là nó sẽ vui vẻ mất 1GB hoặc hơn, tùy thuộc vào số lượng phụ thuộc bạn sử dụng và sự đa dạng của phiên bản mà bạn cho phép về mặt lý thuyết, tức là nếu bạn cho phép Symfony ~2.3, thì bạn làm cho Nhà soạn nhạc đối phó với nhiều phiên bản khả thi hơn so với sử dụng ~2.7.

Cũng lưu ý rằng chạy Composer trên máy sản xuất không phải là ý tưởng tốt nhất. Bạn sẽ phải có quyền truy cập vào Github, có thể cung cấp thông tin xác thực truy cập, cài đặt công cụ VCS và bạn sẽ dễ dàng phá vỡ trang web của mình nếu bất kỳ máy chủ lưu trữ từ xa nào ngoại tuyến trong khi cập nhật. Tốt hơn là sử dụng Composer trên một hệ thống triển khai thực hiện tất cả các bước chuẩn bị, sau đó chuyển tất cả các tệp lên máy chủ sản xuất.

Cập nhật

Bây giờ đã là năm 2020 và cách Composer quản lý bộ nhớ của nó đã thay đổi khá nhiều. Điều quan trọng nhất là Composer sẽ tự tăng giới hạn bộ nhớ nếu nó gặp phải giới hạn đặt quá thấp. Tuy nhiên, điều này ngay lập tức gây ra sự cố hết bộ nhớ trên các máy có quá ít bộ nhớ được cài đặt. Bạn có thể làm cho Composer sử dụng ít bộ nhớ hơn bằng cách đặt biến môi trường như thế nào COMPOSER_MEMORY_LIMIT=512M, nhưng điều này sẽ tạo ra vấn đề nếu Composer cần nhiều bộ nhớ hơn để hoạt động chính xác.

Điểm chính của tôi vẫn đúng: Không chạy Composer trên các máy có quá ít bộ nhớ được cài đặt. Bạn có thể cần 1,5 GB bộ nhớ trống để có thể cập nhật mọi thứ.


Tôi chỉ wite: php -r "readfile (' getcomposer.org/installer' );" | php và sau đó tất cả mọi thứ hoạt động tốt ... cũng thans TRỢ GIÚP
Andrew

34
php -d memory_limit=-1 $(which composer) updatethuận tiện hơn do không cần chỉ định đường dẫn của nhà soạn nhạc.
Rax

1
Điều đó thật tuyệt. Tôi không biết bạn có thể tăng bộ nhớ cho một lệnh duy nhất. Đó là những gì điều này đang làm phải không?
plushyObject

làm thế nào trong cửa sổ?
Ray

1
@Rax một điều nữa, nếu bạn đang chạy lệnh này trong windows trên mingw thì bạn sẽ gặp lỗi rằng đường dẫn phải được dịch, vì vậy hãy sử dụng lệnh nàyphp -d memory_limit=-1 $(which composer).phar update
Faizan

139

Đặt nó để sử dụng nhiều bộ nhớ như nó muốn với:

COMPOSER_MEMORY_LIMIT=-1 composer update

Làm cách nào chúng ta có thể đặt giá trị này hoặc bất kỳ giá trị nào trên toàn cầu? thay vì phải làm điều này mỗi lần thông qua CLI?
snh_nl

@snh_nl, bạn sẽ cần đặt giới hạn bộ nhớ php. Ví dụ: chapterthree.com/blog/how-fix-composer-memory-issue
jasonflaherty

2
Xác định nó trên toàn cầu trong hồ sơ / etc / của bạn (hoặc bất kỳ trình bao nào bạn sử dụng) với COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT. Hay định nghĩa nó là một bí danh shell? alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer', sau đó sử dụng memcomposerthay vìcomposer
diamondea

Nó vẫn nóiFatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Ozan Kurt

15

Tôi đang gặp phải sự cố với trình soạn nhạc vì nó chiếm hết bộ nhớ có sẵn và sau đó, quy trình bị giết (thực tế, thông báo đầu ra là "Killed")

Vì vậy, tôi đang tìm giải pháp để hạn chế việc sử dụng bộ nhớ của nhà soạn nhạc.

Tôi đã thử (từ câu trả lời @Sven)

$ php -d memory_limit=512M /usr/local/bin/composer update

Nhưng nó không hoạt động vì

"Composer bên trong tăng memory_limit lên 1,5G."

-> Đó là từ trang web của nhà soạn nhạc.

Sau đó, tôi tìm thấy một lệnh hoạt động:

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update

Mặc dù vậy, trong trường hợp của tôi, 512mb là không đủ!

Nguồn: https://www.agileana.com/blog/composer-memory-limit-troubleshooting/


1
Tôi đã phải sử dụng trình soạn nhạc như vậy: COMPOSER_MEMORY_LIMIT = 1024M trình soạn nhạc yêu cầu 'mô-đun'
jasonflaherty

1
Tương tự, tôi đã sử dụngCOMPOSER_MEMORY_LIMIT=-1 composer require <package name>
realtebo

12

Tôi đã phải kết hợp COMPOSER_MEMORY_LIMITmemory_limittrong dòng lệnh:

Trên Windows:

set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update

Trên Linux:

export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update

Đây là cái duy nhất làm việc cho tôi trên Mac OS X El Capitan.
ymd_ Ngày

Làm việc cho tôi, cảm ơn
Sayydika

8

Nếu có đủ bộ nhớ, trình soạn nhạc sẽ sử dụng nội bộ nó và chạy mà không gặp vấn đề gì. Không cần phải nói cụ thể người soạn nhạc làm điều đó.

Bạn đã cố gắng tăng bộ nhớ hoán đổi của mình chưa, vì nó có hiệu quả với tôi. Tôi đã tăng bộ nhớ hoán đổi lên 4096Mb (4GB) và bây giờ tất cả đều tuyệt vời đối với tôi.

trước tiên sử dụng " sudo free" để xem bộ nhớ khả dụng và hoán đổi bộ nhớ. và định cấu hình hoán đổi dưới dạng,

Đối với Debian:

sudo fallocate -l 4G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=4096k count=1048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

để làm cho nó thấm, hãy thêm tệp này vào tệp / etc / fstab, /swapfile swap swap defaults 0 0

Đối với CentOS:

[root@myserver]:/# cd /var
[root@myserver]:/var# touch swap.img
[root@myserver]:/var# chmod 600 swap.img
[root@myserver]:/var# mkswap /var/swap.img

[root@myserver]:/var# dd if=/dev/zero of=/var/swap.img bs=4096k count=1000
[root@myserver]:/var# mkswap /var/swap.img 
[root@myserver]:/var# swapon /var/swap.img

bạn có thể tăng bộ nhớ hoán đổi của mình bằng cách thay đổi bs = 1024k hoặc 2048k hoặc 8096k tùy thuộc vào kích thước khối lượng vật lý của bạn. sử dụng lệnh 'swapon' và swapoff để thấy sự khác biệt.

kiểm tra 'swappiness' (60 nên làm tốt,)

cat /proc/sys/vm/swappiness

4

Bạn có thể thay đổi memory_limitgiá trị trong php.ini của mình

Hãy thử tăng giới hạn trong tệp php.ini của bạn

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

Lưu ý: Composer nội bộ tăng memory_limit lên 1,5G.

Đọc tài liệu getcomposer.org


3

Trên MAC OS High Siera, tôi đã chạy như sau:

MacBook-Pro:asiu jack$ php --ini

Trả lại:

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

Tất cả các câu trả lời ở trên đang thiết lập cấu hình được tải sẽ cập nhật, nhưng lưu ý rằng các tệp .ini bổ sung được phân tích cú pháp có php-memory-limit.ini là một tệp riêng biệt. Bạn cũng phải cập nhật giới hạn bộ nhớ tệp này. cùng một cách mở trong trình soạn thảo văn bản và thay đổi thành một số thứ như 2G. Đầu ra khi bị lỗi giới hạn bộ nhớ sẽ cho bạn biết nó cần bao nhiêu bộ nhớ để chạy, chỉ cần đặt nó thành cao hơn hoặc -1 cho không giới hạn.


2

Lỗi này có thể xảy ra đặc biệt khi bạn đang cập nhật các thư viện lớn hoặc các thư viện có nhiều phụ thuộc. Nhà soạn nhạc có thể khá đói bộ nhớ.

Đảm bảo rằng bản thân nhà soạn nhạc của bạn được cập nhật lên phiên bản mới nhất:

php composer.phar --self-update

Bạn có thể tạm thời tăng giới hạn bộ nhớ cho trình soạn nhạc bằng cách thêm biến môi trường giới hạn bộ nhớ trình soạn nhạc:

COMPOSER_MEMORY_LIMIT=128MB php composer.phar update

Sử dụng định dạng “128M” cho megabyte hoặc “2G” cho gigabyte. Bạn có thể sử dụng giá trị “-1” để hoàn toàn bỏ qua giới hạn bộ nhớ.

Một cách khác là tăng giới hạn bộ nhớ PHP:

php -d memory_limit=512M composer.phar update ...

1

Máy chủ aws của bạn lớn bao nhiêu? Nếu nó chỉ có 1gb ram, việc đặt giới hạn bộ nhớ 2gb trong php.ini sẽ không giúp ích được gì.

Nếu bạn không thể / không muốn cũng tăng phía máy chủ để có thêm RAM, bạn cũng có thể bật SWAP.

Xem ở đây để biết cách bật hoán đổi. Nó cho phép 4gb, mặc dù bản thân tôi thường chỉ làm 1GB.

Nguồn: Lấy từ trang laracast


1

Giải pháp tốt nhất cho tôi là

COMPOSER_MEMORY_LIMIT=-1 composer require <package name>

được đề cập bởi @realtebo


0

Trong trường hợp của tôi, không có câu trả lời nào giúp được. Cuối cùng hóa ra, việc thay đổi sang phiên bản PHP 64 bit (M $ Windows) đã khắc phục sự cố ngay lập tức. Tôi đã không thay đổi bất kỳ cài đặt nào - nó chỉ hoạt động.


0

Tôi đã thực hiện điều này trên Widnows 10 và đã làm việc với tôi:

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

Bạn có thể thay đổi Giá trị xx mà bạn muốn

 memory_limit=XX

0

Tôi đang chạy Laravel 6 với Homestead và cũng gặp sự cố này. Như được đề xuất ở đây trong các câu trả lời khác, bạn có thể đặt tiền tố COMPOSER_MEMORY_LIMIT=-1cho một lệnh duy nhất và chạy lệnh bình thường. Nếu bạn muốn cập nhật cấu hình PHP của mình để luôn cho phép bộ nhớ không giới hạn, hãy làm theo các bước sau.

vagrant up
vagrant ssh
php --version # 7.4
php --ini # Shows path to the php.ini file that's loaded
cd /etc/php/7.4/cli # your PHP version. Each PHP version has a folder
sudo vi php.ini

Thêm vào memory_limit=-1tệp php.ini của bạn. Nếu bạn gặp sự cố khi sử dụng Vim hoặc chỉnh sửa tệp php.ini, hãy xem câu trả lời này về cách chỉnh sửa tệp php.ini bằng Vim. Tệp sẽ trông giống như sau:

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

Lưu ý rằng điều này có thể chiếm vô số bộ nhớ trên máy của bạn. Có lẽ không phải là một ý tưởng tốt cho sản xuất lol. Với Laravel Valet đã phải theo dõi bài viết này và cập nhật giá trị bộ nhớ tại đây:

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

Sau đó khởi động lại máy chủ bằng Valet:

valet restart

Câu trả lời này cũng hữu ích cho việc thay đổi cấu hình với Laravel Valet trên Mac để các thay đổi có hiệu lực.


0
<C:\>set COMPOSER_MEMORY_LIMIT=-1
<C:\>composer install exhausted/packages

3
Vui lòng thêm một số giải thích cho câu trả lời của bạn để những người khác có thể học hỏi từ nó
Nico Haase.



-1

Trong trường hợp của tôi, nó cần quyền cao hơn cùng với việc tăng giới hạn bộ nhớ này.

sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar update

Chạy Composer với sudokhông phải là một ý tưởng hay, vì nó sẽ trộn lẫn các quyền của bạn. Điều này có vẻ như bạn đang chạy composer updatetrên một máy chủ - đây cũng là một phương pháp không tốt, vì nó sẽ khiến việc đặt các phụ thuộc được tính toán dưới quyền kiểm soát phiên bản sẽ khác hơn nhiều
Nico Haase

Đồng ý với @NicoHaase, bạn cần phải rất cẩn thận khi sử dụng cái này! cảm ơn.
Naser Nikzad
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.