Magento 2 Allowed Błąd wyczerpania pamięci podczas kompilacji kodu

28

Mam błąd podczas dodawania modułu ..

Uruchom ponownie polecenie kompilacji Magento

więc uruchamiam poniżej polecenia, ale również wyświetlam błąd, który poniżej, gdy uruchamiam polecenie z roota

konfiguracja php magento: di: kompilacja

Compilation was started.
%message% 0/7 [>---------------------------]   0% 1 sec 37.0 MiB%message% 0/7 [>
---------------------------]   0% 1 sec 37.0 MiBProxies code generation... 0/7 [
>---------------------------]   0% 1 sec 37.0 MiB
Proxies code generation... 1/7 [====>-----------------------]  14% 47 secs 43.5
MiB
Repositories code generation... 1/7 [====>-----------------------]  14% 47 secs
43.5 MiB
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate
 24 bytes) in D:\xampp\htdocs\linsenwelt\vendor\zendframework\zend-code\src\Scan
ner\FileScanner.php on line 36

Jak naprawić ?

Khushbu Mehta
źródło
Otrzymuję ten sam błąd na serwerze na żywo
SIBHI S

Odpowiedzi:

72

Szybkim rozwiązaniem dla limitu pamięci w poleceniu Magento 2 jest bezpośrednie dodanie limitu pamięci w poleceniu.

W przypadku polecenia Kompilacja

php -dmemory_limit=5G bin/magento setup:di:compile

Do wdrożenia

php -dmemory_limit=5G bin/magento setup:static-content:deploy

Możesz zmienić zgodnie z 5G na maksimum, jeśli problem nie zostanie rozwiązany.

Rakesh Jesadiya
źródło
1
dzięki @rakesh to oszczędza mój czas jeszcze raz bardzo dziękuję
Nagaraju K
1
Uważaj, zwiększenie limitu pamięci może być tylko rozwiązaniem tymczasowym.
Macas
8

Wygląda na to, że twój cli ma przydzielone tylko 128 MB pamięci. Jeśli to możliwe, zwiększ wartość do co najmniej 256 MB lub 512 MB.

Marius
źródło
Próbowałem rozmiar 512 MB dla mojego pliku php.ini, ale nadal nie działa ... jak rozwiązać?
Khushbu Mehta,
Jeśli nadal Allowed memory size of 134217728 bytesmasz, to nie zwiększyłeś limitu pamięci dla cli.
Marius
W którym pliku ustawiłem limit pamięci?
Khushbu Mehta,
8

użyj tego „brudnego” sposobu

php -dmemory_limit=-1 bin/magento setup:di:compile
Ansyori
źródło
6
php -dmemory_limit=6G bin/magento setup:di:compile
Sheshgiri Anvekar
źródło
5

Jeśli używasz PHP> = 5.3.0 i korzystałeś z Magento 2.1.x i nowszych, to po uruchomieniu composer installdwa pliki zostaną utworzone w katalogu głównym i katalogu pub o nazwie.user.ini

Edytuj te pliki, aby zastąpić ustawienia PHP.ini, w tym przypadku jest to memory_limit

; Set PHP memory limit to 768M which already enough for compilation tasks
memory_limit = 768M
max_execution_time = 18000

Jeśli używasz Apache, będziesz musiał dbać o pliki tylko w katalogu głównym, a nie o /pubjeden i odwrotnie, jeśli używasz engineX (nginx)

Mam nadzieję, że to pomoże.

Toan Nguyen
źródło
3

Musisz zwiększyć pamięć przydzieloną do php. Aby zwiększyć pamięć, wykonaj polecenie php --ini. Findout załadowany php.ini. Tak powinno być

Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      /etc/php5/cli/conf.d/05-opcache.ini,

Przejdź do aktualnie załadowanego pliku php.ini (/etc/php5/cli/php.ini) i znajdź parametr limit_pamięci. Zwiększ wartość w stosunku do parametru memory_limit do 256M lub 512M.

Amit Sachan
źródło
3

Ta sytuacja może być trudna do debugowania, ponieważ jeśli tylko chcesz

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

pokazuje limit pamięci dla PHP na twojej ścieżce, co może być w porządku. Ale skrypt magento (bin / magento) używa preambuły

#!/usr/bin/env php

więc niekoniecznie używa PHP z twojej ścieżki! Jednym ze sposobów wyśledzenia php.iniużywanego pliku jest napisanie małego skryptu:

#!/usr/bin/env php
<?php
phpinfo();

wywołaj go getinfo(nie getinfo.php!), spraw, aby był wykonywalny, a następnie uruchom go w następujący sposób:

./getinfo  | grep php.ini

Spowoduje to wyświetlenie pliku ini, który należy zmienić. W tym pliku zmień wartość konfiguracji, memory_limitjak sugerowano w innych postach, na wyższą niż 128M. Następnie zapisz plik i sprawdź swoją pracę:

./getinfo  | grep memory_limit
Scott C. Wilson
źródło
2

Mam podobny problem, limit pamięci został zwiększony do 2 GB w pliku php ini, plik phpinfo () pokazał, że został ustawiony na 2 GB. Wygląda na to, że Magento ustawia gdzieś limit pamięci. Zwiększyłem limit pamięci w bin bin / magento. W pierwszym wierszu umieszczam to:

ini_set('memory_limit', '656M');

dzięki czemu działało.

JohnyFree
źródło
2

Mam rozwiązanie mojego pytania. W przypadku błędu wyczerpania pamięci musimy dodać limit pamięci dla kodu kompilacji.

php -dmemory_limit=4G bin/magento setup:di:compile

Mam nadzieję, że pomoże to komuś w przyszłości.

Khushbu Mehta
źródło
0

Użyj następującego wiersza po php/bin magento -d memory_limit=5G s:d:c kod kompilacji. Wynika to z dozwolonego limitu pamięci php. Ale po zezwoleniu na limit pamięci w poleceniu usunie to błąd, a kompilacja i inne polecenia będą działać bezbłędnie. Po prostu dodaj to
-d memory_limit=5G do każdego polecenia, jak pokazano w powyższym przykładzie. Głosuj za uznaniem mojej odpowiedzi za przydatną.

Rakesh Kumar
źródło
0

Kompilacja przy użyciu „-d memory_limit = 5G” nie jest mądrą decyzją. Jest to rozwiązanie tymczasowe, na które może wpłynąć proces przełączania trybów, tj. Od programisty do produkcji. Tym razem system kompiluje kod bez logiki „-d memory_limit = 5G”, która generuje błąd.

Lepszym rozwiązaniem jest naprawienie tego błędu na tym etapie. Aby to naprawić, otwórz php.ini i zwiększ limit pamięci o 1024M i uruchom polecenie kompilacji php bin / magento setup: di: compile

Sprawdź to: https://getcomposer.org/doc/articles/troublesh.md#memory-limit-errors

Tym razem powinno działać

zuber bandi
źródło
0

Jeśli napotykasz ten problem w Cli, podaj to polecenie

php -dmemory_limit = Konfiguracja bin / magento 8G: aktualizacja

hirokapuriya
źródło
0

dla M2 dodaj limit pamięci poprzez ssh z poniższym poleceniem.

dla polecenia kompilacji: php -dmemory_limit=5G bin/magento setup:di:compile dla polecenia wdrożenia: php -dmemory_limit=5G bin/magento setup:static-content:deploy

możesz zwiększyć wartość 5G, jeśli problem nie został rozwiązany.

Anas Mansuri
źródło
0

67

Szybkim rozwiązaniem dla limitu pamięci w poleceniu Magento 2 jest bezpośrednie dodanie limitu pamięci w poleceniu.

W przypadku polecenia Kompilacja

php -dmemory_limit = 5G bin / magento setup: di: compile For Deployment

php -dmemory_limit = Konfiguracja bin / magento 5G: zawartość statyczna: wdrażanie Możesz zmienić zgodnie z 5G na maksimum, jeśli problem nie zostanie rozwiązany.

to naprawdę działa :)

Alauddin Forhad
źródło