Magento 2 Allowed Memory หมดข้อผิดพลาดเมื่อรวบรวมรหัส


28

ฉันมีข้อผิดพลาดเมื่อฉันเพิ่มโมดูล ..

โปรดเรียกใช้คำสั่งรวบรวมวีโอไอพีอีกครั้ง

ดังนั้นฉันจึงรันคำสั่งด้านล่าง แต่ยังแสดงข้อผิดพลาดที่ด้านล่างเมื่อรันคำสั่งจากรูต

php magento setup: di: compile

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

จะแก้ไขอย่างไร


ฉันได้รับข้อผิดพลาดเดียวกันในเซิร์ฟเวอร์สด
SIBHI S

คำตอบ:


72

วิธีแก้ปัญหาอย่างรวดเร็วสำหรับการ จำกัด หน่วยความจำในคำสั่ง Magento 2 คือการเพิ่มการ จำกัด หน่วยความจำภายในคำสั่งโดยตรง

สำหรับคำสั่งการรวบรวม

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

สำหรับการปรับใช้

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

คุณสามารถเปลี่ยนได้ 5G ต่อสูงสุดหากปัญหาไม่ได้รับการแก้ไข


1
ขอบคุณ @rakesh มันช่วยประหยัดเวลาของฉันขอบคุณมากอีกครั้ง
Nagaraju K

1
ระวังการเพิ่มขีด จำกัด หน่วยความจำอาจเป็นเพียงวิธีแก้ปัญหาชั่วคราว
Macas

8

ดูเหมือนว่าหน่วยความจำของคุณมีหน่วยความจำเพียง 128MB เท่านั้น เพิ่มค่าเป็นอย่างน้อย 256MB หรือ 512MB หากทำได้


ฉันลองขนาดไฟล์ 512mb สำหรับไฟล์ php.ini ของฉัน แต่ยังใช้งานไม่ได้ ... จะแก้ปัญหาอย่างไร
Khushbu Mehta

หากคุณยังคงได้รับAllowed memory size of 134217728 bytesคุณจะไม่เพิ่มขีด จำกัด หน่วยความจำสำหรับ cli
Marius

ไฟล์ใดที่ฉันตั้งค่าขีด จำกัด หน่วยความจำ
Khushbu Mehta



5

หากคุณใช้ PHP> = 5.3.0 และคุณใช้ Magento 2.1.x ขึ้นไปหลังจากที่คุณเรียกใช้composer installแล้วสองไฟล์จะถูกสร้างขึ้นในไดเรกทอรีรากของคุณและชื่อ pub pub ของคุณ.user.ini

แก้ไขไฟล์เหล่านั้นเพื่อแทนที่การตั้งค่า PHP.ini ของคุณในกรณีนี้คือ memory_limit

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

หากคุณใช้ Apache คุณจะต้องดูแลไฟล์ภายในไดเรกทอรีรากเท่านั้นไม่ใช่ไฟล์/pubเดียวและในทางกลับกันหากคุณใช้ engineX (nginx)

หวังว่ามันจะช่วย


3

คุณต้องเพิ่มหน่วยความจำที่จัดสรรให้กับ php php --iniเพิ่มหน่วยความจำดำเนินการคำสั่ง Findout โหลด php.ini แล้ว มันควรจะเป็นเช่น

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,

ไปที่โหลด php.ini ปัจจุบัน (/etc/php5/cli/php.ini) และค้นหาพารามิเตอร์ memory_limit เพิ่มค่ากับพารามิเตอร์ memory_limit เป็น 256M หรือ 512M


3

สถานการณ์นี้อาจเป็นเรื่องยากที่จะแก้ไขข้อบกพร่องเพราะถ้าคุณเพียง

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

มันแสดงขีด จำกัด หน่วยความจำสำหรับ PHP ในเส้นทางของคุณซึ่งอาจใช้ได้ แต่สคริปต์คุณภาพเยี่ยม (bin / magento) ใช้คำนำ

#!/usr/bin/env php

ดังนั้นจึงไม่จำเป็นต้องใช้ PHP จากเส้นทางของคุณ! วิธีหนึ่งในการติดตามphp.iniไฟล์ที่ใช้อยู่คือการเขียนสคริปต์ขนาดเล็กดังนี้

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

เรียกมันว่าgetinfo(ไม่ใช่getinfo.php!) ทำให้มันใช้งานได้จากนั้นเรียกใช้ดังนี้:

./getinfo  | grep php.ini

นี่จะแสดงไฟล์ ini ที่คุณต้องการเปลี่ยน ในไฟล์นั้นเปลี่ยนค่าการกำหนดค่าmemory_limitตามที่แนะนำในโพสต์อื่นเป็นค่าที่สูงกว่า 128M จากนั้นบันทึกไฟล์และตรวจสอบงานของคุณ:

./getinfo  | grep memory_limit

2

ฉันพบปัญหาที่คล้ายกันขีด จำกัด หน่วยความจำเพิ่มขึ้นเป็น 2Gb ภายในไฟล์ php ini ไฟล์ phpinfo () แสดงให้เห็นว่าตั้งเป็น 2Gb ดูเหมือนว่าวีโอไอพีจะตั้งค่า จำกัด หน่วยความจำด้วยตนเองที่ไหน ฉันเพิ่มขีด จำกัด หน่วยความจำภายในไฟล์ bin / magento ในบรรทัดแรกฉันใส่สิ่งนี้:

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

ซึ่งทำให้มันทำงาน


2

ฉันมีทางออกสำหรับคำถามของฉัน สำหรับข้อผิดพลาดที่หน่วยความจำหมดเราต้องเพิ่มหน่วยความจำเพื่อรวบรวมรหัส

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

หวังว่ามันจะช่วยใครซักคนในอนาคต


0

ผู้ใช้บรรทัดต่อไปนี้หลังจาก php/bin magento -d memory_limit=5G s:d:c รหัสการรวบรวมของคุณ นี่เป็นเพราะขีด จำกัด ของหน่วยความจำที่อนุญาตให้ใช้กับ php แต่หลังจากอนุญาตให้ จำกัด หน่วยความจำในคำสั่งนี้จะลบข้อผิดพลาดและการรวบรวมและคำสั่งอื่น ๆ ของคุณจะทำงานโดยไม่มีข้อผิดพลาดใด ๆ เพียงเพิ่มสิ่งนี้
-d memory_limit=5G ในทุกคำสั่งตามที่คุณเห็นในตัวอย่างด้านบน โหวตขึ้นถ้าคุณคิดว่าคำตอบของฉันมีประโยชน์


0

การรวบรวมโดยใช้ "-d memory_limit = 5G" ไม่ใช่การตัดสินใจที่ชาญฉลาด มันเป็นวิธีการชั่วคราวที่อาจได้รับผลกระทบระหว่างกระบวนการสลับโหมดเช่นจากนักพัฒนาไปจนถึงการผลิต เวลานี้ระบบคอมไพล์โค้ดโดยไม่มีตรรกะนี้ "-d memory_limit = 5G" ซึ่งมีข้อผิดพลาดเกิดขึ้น

เป็นตัวเลือกที่ดีกว่าในการแก้ไขข้อผิดพลาดในขั้นตอนนี้ ในการแก้ไขปัญหานี้ให้เปิด php.ini และเพิ่ม memory_limit ที่ 1024M และเรียกใช้คำสั่งคอมไพล์การตั้งค่า php bin / magento: di: compile

ตรวจสอบสิ่งนี้: https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors

เวลานี้มันควรจะทำงาน


0

หากคุณกำลังเผชิญปัญหานี้ใน Cli โปรดถาดคำสั่งนี้

php -dmemory_limit = การตั้งค่า bin / magento 8G: อัปเกรด


0

สำหรับ M2 เพิ่มขีด จำกัด หน่วยความจำผ่าน ssh ด้วยคำสั่งด้านล่าง

สำหรับคำสั่งการคอมไพล์: php -dmemory_limit=5G bin/magento setup:di:compile สำหรับคำสั่งการปรับใช้: php -dmemory_limit=5G bin/magento setup:static-content:deploy

คุณสามารถเพิ่มมูลค่า 5G หากปัญหาไม่ได้รับการแก้ไข


0

67

วิธีแก้ปัญหาอย่างรวดเร็วสำหรับการ จำกัด หน่วยความจำในคำสั่ง Magento 2 คือการเพิ่มการ จำกัด หน่วยความจำภายในคำสั่งโดยตรง

สำหรับคำสั่งการรวบรวม

php -dmemory_limit = การตั้งค่า bin / magento 5G: di: compile For Deployment

php -dmemory_limit = การตั้งค่าถังขยะ / วีโอไอพี 5G: เนื้อหาคงที่: ปรับใช้คุณสามารถเปลี่ยนได้ 5G ต่อสูงสุดหากปัญหาไม่ได้รับการแก้ไข

มันใช้งานได้จริง :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.